iSulad/0003-isulad-rt_isula_start-should-read-the-isulad-shim-pi.patch

93 lines
2.9 KiB
Diff
Raw Normal View History

From 3942bcc4c3a755d33e709046edd358f9af264d11 Mon Sep 17 00:00:00 2001
From: holyfei <yangfeiyu20092010@163.com>
Date: Wed, 21 Oct 2020 10:00:15 +0800
Subject: [PATCH 03/28] isulad: rt_isula_start should read the isulad-shim
pidinfo
reason: the ppid of init pid should be isulad-shim, read isulad-shim pidinfo and set the start time for init pidinfo
Signed-off-by: yangfeiyu <yangfeiyu2@huawei.com>
---
.../modules/runtime/isula/isula_rt_ops.c | 38 ++++++++++++++++++-
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/src/daemon/modules/runtime/isula/isula_rt_ops.c b/src/daemon/modules/runtime/isula/isula_rt_ops.c
index 6e4512f..82d7aec 100644
--- a/src/daemon/modules/runtime/isula/isula_rt_ops.c
+++ b/src/daemon/modules/runtime/isula/isula_rt_ops.c
@@ -851,8 +851,13 @@ out:
int rt_isula_start(const char *id, const char *runtime, const rt_start_params_t *params, pid_ppid_info_t *pid_info)
{
char workdir[PATH_MAX] = { 0 };
+ char shim_pid_file_name[PATH_MAX] = { 0 };
pid_t pid = 0;
+ pid_t shim_pid = -1;
int ret = 0;
+ int splice_ret = 0;
+ proc_t *proc = NULL;
+ proc_t *p_proc = NULL;
if (id == NULL || runtime == NULL || params == NULL || pid_info == NULL) {
ERROR("nullptr arguments not allowed");
@@ -863,6 +868,12 @@ int rt_isula_start(const char *id, const char *runtime, const rt_start_params_t
return -1;
}
+ splice_ret = snprintf(shim_pid_file_name, sizeof(shim_pid_file_name), "%s/shim-pid", workdir);
+ if (splice_ret < 0 || splice_ret >= sizeof(shim_pid_file_name)) {
+ ERROR("%s: wrong shim workdir", id);
+ return -1;
+ }
+
pid = get_container_process_pid(workdir);
if (pid < 0) {
ret = -1;
@@ -870,12 +881,32 @@ int rt_isula_start(const char *id, const char *runtime, const rt_start_params_t
goto out;
}
- if (util_read_pid_ppid_info(pid, pid_info) != 0) {
+ file_read_int(shim_pid_file_name, &shim_pid);
+ if (shim_pid < 0) {
+ ret = -1;
+ ERROR("%s: failed to read isulad shim pid", id);
+ goto out;
+ }
+
+ proc = util_get_process_proc_info(pid);
+ if (proc == NULL) {
ret = -1;
- ERROR("%s: failed read pid info", id);
+ ERROR("%s: failed to read pidinfo", id);
goto out;
}
+ p_proc = util_get_process_proc_info(shim_pid);
+ if (p_proc == NULL) {
+ ret = -1;
+ ERROR("%s: failed to read isulad shim pidinfo", id);
+ goto out;
+ }
+
+ pid_info->pid = proc->pid;
+ pid_info->start_time = proc->start_time;
+ pid_info->ppid = shim_pid;
+ pid_info->pstart_time = p_proc->start_time;
+
if (runtime_call_simple(workdir, runtime, "start", NULL, 0, id) != 0) {
ERROR("call runtime start id failed");
ret = -1;
@@ -888,6 +919,9 @@ out:
shim_kill_force(workdir);
}
+ free(proc);
+ free(p_proc);
+
return ret;
}
--
2.20.1