2020-01-05 22:20:49 -05:00
|
|
|
From aed5ecb69d2256933b431eac01e83e69bb72c753 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
|
2020-01-05 22:20:49 -05:00
|
|
|
Subject: [PATCH 129/138] 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
|
2020-01-05 22:20:49 -05:00
|
|
|
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));
|
|
|
|
|
--
|
2020-01-05 22:20:49 -05:00
|
|
|
1.8.3.1
|
2019-12-25 15:57:42 +08:00
|
|
|
|