summaryrefslogtreecommitdiff
path: root/0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-03-04 12:23:00 +0000
committerCoprDistGit <infra@openeuler.org>2025-03-04 12:23:00 +0000
commit434d8166bff360cdb7039326bb617ebaca98face (patch)
tree1b0333fc674186afc80e2193efebadf8d521d51f /0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch
parent2ccdcb50a81459161cf6b42f0b45c2b86e1bbf76 (diff)
automatic import of iSuladopeneuler22.03_LTS
Diffstat (limited to '0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch')
-rw-r--r--0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch b/0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch
new file mode 100644
index 0000000..cbd8381
--- /dev/null
+++ b/0134-ignore-chdir-failed-errmsg-when-kill-and-delete.patch
@@ -0,0 +1,116 @@
+From f3a8da522798e68a6ba5e8f00163c4a6d05a30d0 Mon Sep 17 00:00:00 2001
+From: zhongtao <zhongtao17@huawei.com>
+Date: Wed, 7 Aug 2024 23:44:12 +1400
+Subject: [PATCH 143/149] ignore chdir failed errmsg when kill and delete
+
+Signed-off-by: zhongtao <zhongtao17@huawei.com>
+---
+ .../modules/runtime/isula/isula_rt_ops.c | 44 ++++++++++++++-----
+ 1 file changed, 32 insertions(+), 12 deletions(-)
+
+diff --git a/src/daemon/modules/runtime/isula/isula_rt_ops.c b/src/daemon/modules/runtime/isula/isula_rt_ops.c
+index 62cff3cf..dc156154 100644
+--- a/src/daemon/modules/runtime/isula/isula_rt_ops.c
++++ b/src/daemon/modules/runtime/isula/isula_rt_ops.c
+@@ -69,7 +69,7 @@
+ #define RESOURCE_FNAME_FORMATS "%s/resources.json"
+
+ // handle string from stderr output.
+-typedef int(*handle_output_callback_t)(const char *output);
++typedef int(*handle_output_callback_t)(const char *output, const char *workdir);
+ typedef struct {
+ bool fg;
+ const char *id;
+@@ -757,7 +757,7 @@ static int runtime_call_simple(const char *workdir, const char *runtime, const c
+ // we consider the runtime call simple succeeded,
+ // even if the process exit with failure.
+ if (stderr_msg != NULL && cb != NULL) {
+- ret = cb(stderr_msg);
++ ret = cb(stderr_msg, workdir);
+ }
+ }
+
+@@ -768,17 +768,37 @@ static int runtime_call_simple(const char *workdir, const char *runtime, const c
+
+ // oci runtime return -1 if the container 'does not exist'
+ // if output contains 'does not exist', means nothing to kill or delete, return 0
++// util_exec_cmd return -1 if chdir failed
++// if output contains 'chdir %s failed', means state dir damaged, return 0
+ // this will change the exit status of kill or delete command
+-static int non_existent_output_check(const char *output)
++static int shielded_output_check(const char *output, const char *workdir)
+ {
+- char *pattern = "does not exist";
++ int nret = 0;
++ const char *nonexist_pattern = "does not exist";
++ char chdir_pattern[PATH_MAX] = { 0 };
+
+- if (output == NULL) {
++ if (output == NULL || workdir == NULL) {
+ return -1;
+ }
+
+ // container not exist, kill or delete success, return 0
+- if (util_strings_contains_word(output, pattern)) {
++ if (util_strings_contains_word(output, nonexist_pattern)) {
++ return 0;
++ }
++
++ if (sizeof(chdir_pattern) > PATH_MAX - strlen("chdir ") - strlen(" failed")) {
++ INFO("chdir_pattern is too long");
++ return -1;
++ }
++
++ nret = snprintf(chdir_pattern, sizeof(chdir_pattern), "chdir %s failed", workdir);
++ if (nret < 0 || (size_t)nret >= sizeof(chdir_pattern)) {
++ INFO("Failed to make full chdir_pattern");
++ return -1;
++ }
++
++ // if output contains 'chdir ${workdir} failed', means state dir damaged, return 0
++ if (util_strings_contains_word(output, chdir_pattern)) {
+ return 0;
+ }
+
+@@ -786,15 +806,15 @@ static int non_existent_output_check(const char *output)
+ return -1;
+ }
+
+-// kill success or non_existent_output_check succeed return 0, DO_RETRY_CALL will break;
++// kill success or shielded_output_check succeed return 0, DO_RETRY_CALL will break;
+ // if kill failed, recheck on shim alive, if not alive, kill succeed, still return 0;
+ // else, return -1, DO_RETRY_CALL will call this again;
+ static int runtime_call_kill_and_check(const char *workdir, const char *runtime, const char *id)
+ {
+ int ret = -1;
+
+- // kill succeed, return 0; non_existent_output_check succeed, return 0;
+- ret = runtime_call_simple(workdir, runtime, "kill", NULL, 0, id, non_existent_output_check);
++ // kill succeed, return 0; shielded_output_check succeed, return 0;
++ ret = runtime_call_simple(workdir, runtime, "kill", NULL, 0, id, shielded_output_check);
+ if (ret == 0) {
+ return 0;
+ }
+@@ -814,8 +834,8 @@ static int runtime_call_delete_force(const char *workdir, const char *runtime, c
+ // if the container does not exist when force deleting it,
+ // runc will report an error and isulad does not need to retry the deletion again.
+ // related PR ID:d1a743674a98e23d348b29f52c43436356f56b79
+- // non_existent_output_check succeed, return 0;
+- return runtime_call_simple(workdir, runtime, "delete", opts, 1, id, non_existent_output_check);
++ // shielded_output_check succeed, return 0;
++ return runtime_call_simple(workdir, runtime, "delete", opts, 1, id, shielded_output_check);
+ }
+
+ #define ExitSignalOffset 128
+@@ -1825,7 +1845,7 @@ static int create_resources_json_file(const char *workdir, const shim_client_cgr
+ }
+
+ // show std error msg, always return -1.
+-static int show_stderr(const char *err)
++static int show_stderr(const char *err, const char *workdir)
+ {
+ isulad_set_error_message(err);
+ return -1;
+--
+2.25.1
+