76 lines
3.2 KiB
Diff
76 lines
3.2 KiB
Diff
|
|
From 57921deef3849f519b3fffdcf76184144ba54fb3 Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhongtao <zhongtao17@huawei.com>
|
||
|
|
Date: Tue, 16 May 2023 15:16:13 +0800
|
||
|
|
Subject: [PATCH 5/9] recheck delete command exit status
|
||
|
|
|
||
|
|
Signed-off-by: zhongtao <zhongtao17@huawei.com>
|
||
|
|
---
|
||
|
|
.../modules/runtime/isula/isula_rt_ops.c | 24 ++++++++++++-------
|
||
|
|
1 file changed, 15 insertions(+), 9 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/daemon/modules/runtime/isula/isula_rt_ops.c b/src/daemon/modules/runtime/isula/isula_rt_ops.c
|
||
|
|
index 9008c5c7..07f714f0 100644
|
||
|
|
--- a/src/daemon/modules/runtime/isula/isula_rt_ops.c
|
||
|
|
+++ b/src/daemon/modules/runtime/isula/isula_rt_ops.c
|
||
|
|
@@ -635,9 +635,9 @@ 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, return 0
|
||
|
|
-// this will change the exit status of kill command
|
||
|
|
-static int kill_output_check(const char *output)
|
||
|
|
+// if output contains 'does not exist', means nothing to kill or delete, return 0
|
||
|
|
+// this will change the exit status of kill or delete command
|
||
|
|
+static int non_existent_output_check(const char *output)
|
||
|
|
{
|
||
|
|
char *pattern = "does not exist";
|
||
|
|
|
||
|
|
@@ -645,24 +645,24 @@ static int kill_output_check(const char *output)
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
- // container not exist, kill success, return 0
|
||
|
|
+ // container not exist, kill or delete success, return 0
|
||
|
|
if (util_strings_contains_word(output, pattern)) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
- // kill failed, return -1
|
||
|
|
+ // kill or delete failed, return -1
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
-// kill success or kill_output_check succeed return 0, DO_RETRY_CALL will break;
|
||
|
|
+// kill success or non_existent_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; kill_output_check succeed, return 0;
|
||
|
|
- ret = runtime_call_simple(workdir, runtime, "kill", NULL, 0, id, kill_output_check);
|
||
|
|
+ // 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);
|
||
|
|
if (ret == 0) {
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
@@ -677,7 +677,13 @@ static int runtime_call_kill_and_check(const char *workdir, const char *runtime,
|
||
|
|
static int runtime_call_delete_force(const char *workdir, const char *runtime, const char *id)
|
||
|
|
{
|
||
|
|
const char *opts[1] = { "--force" };
|
||
|
|
- return runtime_call_simple(workdir, runtime, "delete", opts, 1, id, NULL);
|
||
|
|
+ // delete succeed, return 0;
|
||
|
|
+ // When the runc version is less than or equal to v1.0.0-rc3,
|
||
|
|
+ // 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);
|
||
|
|
}
|
||
|
|
|
||
|
|
#define ExitSignalOffset 128
|
||
|
|
--
|
||
|
|
2.40.1
|
||
|
|
|