lxc/0129-cgfsng-add-retry-for-enter-cgroup.patch

71 lines
2.4 KiB
Diff
Raw Normal View History

From 3a7ab52bf9def26650df4f47ade319a441a4dca7 Mon Sep 17 00:00:00 2001
2019-12-25 15:57:42 +08:00
From: LiFeng <lifeng68@huawei.com>
Date: Tue, 10 Dec 2019 05:40:20 -0500
Subject: [PATCH 129/140] cgfsng: add retry for enter cgroup
2019-12-25 15:57:42 +08:00
Signed-off-by: LiFeng <lifeng68@huawei.com>
---
src/lxc/cgroups/cgfsng.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index c96285e..50bdc77 100644
2019-12-25 15:57:42 +08:00
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -1300,11 +1300,23 @@ __cgfsng_ops static bool cgfsng_payload_enter(struct cgroup_ops *ops, pid_t pid)
for (int i = 0; ops->hierarchies[i]; i++) {
int ret;
char *fullpath;
+ int retry_count = 0;
+ int max_retry = 10;
fullpath = must_make_path(ops->hierarchies[i]->container_full_path,
"cgroup.procs", NULL);
+retry:
ret = lxc_write_to_file(fullpath, pidstr, len, false, 0666);
if (ret != 0) {
+ if (errno == ENOENT) {
+ if (retry_count < max_retry) {
+ SYSERROR("Failed to enter cgroup \"%s\" with retry count:%d", fullpath, retry_count);
+ (void)mkdir_eexist_on_last(ops->hierarchies[i]->container_full_path, 0755);
+ usleep(100 * 1000); /* 100 millisecond */
+ retry_count++;
+ goto retry;
+ }
+ }
SYSERROR("Failed to enter cgroup \"%s\"", fullpath);
free(fullpath);
return false;
@@ -2201,6 +2213,8 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename,
struct hierarchy *h;
int ret = 0;
char *controller = NULL;
+ int retry_count = 0;
+ int max_retry = 10;
len = strlen(filename);
controller = alloca(len + 1);
@@ -2228,8 +2242,19 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename,
}
fullpath = must_make_path(h->container_full_path, filename, NULL);
+
+retry:
ret = lxc_write_to_file(fullpath, value, strlen(value), false, 0666);
if (ret) {
+ if (errno == ENOENT) {
+ if (retry_count < max_retry) {
+ SYSERROR("setting cgroup config for ready process caused \"failed to write %s to %s\".", value, fullpath);
+ (void)mkdir_eexist_on_last(h->container_full_path, 0755);
+ usleep(100 * 1000); /* 100 millisecond */
+ retry_count++;
+ goto retry;
+ }
+ }
lxc_write_error_message(ops->errfd,
"%s:%d: setting cgroup config for ready process caused \"failed to write %s to %s: %s\".",
__FILE__, __LINE__, value, fullpath, strerror(errno));
--
1.8.3.1
2019-12-25 15:57:42 +08:00