kata-containers/runtime/patches/0075-move-waitProcess-timeout-to-stop-process.patch
holyfei c709612f2a kata-containers: modify kata-containers version
Fix #I4KI81
reason: modify kata-containers version and update
it to 1.11.1

Signed-off-by: holyfei <yangfeiyu20092010@163.com>
2021-11-30 20:08:25 +08:00

84 lines
2.8 KiB
Diff

From 9568f7f2cad915778396dc8a2743c9c3ed7d44b7 Mon Sep 17 00:00:00 2001
From: gaohuatao <gaohuatao@huawei.com>
Date: Wed, 16 Jun 2021 14:54:24 +0800
Subject: [PATCH] move waitProcess timeout to stop process
reason: move timeout to stopping container process, it is only used in stopping container process to support shimv2
Signed-off-by: gaohuatao <gaohuatao@huawei.com>
---
virtcontainers/container.go | 28 +++++++++++++++++++++++-----
virtcontainers/kata_agent.go | 3 +--
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/virtcontainers/container.go b/virtcontainers/container.go
index 34f6ec6..e976453 100644
--- a/virtcontainers/container.go
+++ b/virtcontainers/container.go
@@ -51,6 +51,8 @@ var cdromMajors = map[int64]string{
32: "CM206_CDROM_MAJOR",
}
+var waitProcessTimeout = 10 * time.Second
+
var safeCopyFiles = map[string]struct{}{
"resolv.conf": {},
"hostname": {},
@@ -1174,11 +1176,27 @@ func (c *Container) stop(force bool) error {
c.Logger().Errorf("send signal to container failed: %v", err)
}
- // Since the agent has supported the MultiWaitProcess, it's better to
- // wait the process here to make sure the process has exited before to
- // issue stopContainer, otherwise the RemoveContainerRequest in it will
- // get failed if the process hasn't exited.
- c.sandbox.agent.waitProcess(c, c.id)
+ done := make(chan error)
+ go func() {
+ // Since the agent has supported the MultiWaitProcess, it's better to
+ // wait the process here to make sure the process has exited before to
+ // issue stopContainer, otherwise the RemoveContainerRequest in it will
+ // get failed if the process hasn't exited.
+ _, err := c.sandbox.agent.waitProcess(c, c.id)
+ if err != nil {
+ done <- err
+ }
+ close(done)
+ }()
+
+ select {
+ case err := <-done:
+ if err != nil {
+ c.Logger().Errorf("wait process failed:%v", err)
+ }
+ case <-time.After(time.Duration(waitProcessTimeout) * time.Second):
+ // Nothing to do
+ }
defer func() {
// Save device and drive data.
diff --git a/virtcontainers/kata_agent.go b/virtcontainers/kata_agent.go
index 058d79e..2717e30 100644
--- a/virtcontainers/kata_agent.go
+++ b/virtcontainers/kata_agent.go
@@ -59,7 +59,6 @@ const (
)
var (
- waitProcessTimeout = 10 * time.Second
checkRequestTimeout = 10 * time.Second
defaultRequestTimeout = 10 * time.Second
createContainerTimeout = 120 * time.Second
@@ -2155,7 +2154,7 @@ func (k *kataAgent) getReqContext(reqName string) (ctx context.Context, cancel c
ctx = context.Background()
switch reqName {
case grpcWaitProcessRequest:
- ctx, cancel = context.WithTimeout(ctx, waitProcessTimeout)
+ // Wait has no timeout
case grpcCheckRequest:
ctx, cancel = context.WithTimeout(ctx, checkRequestTimeout)
case grpcCreateContainerRequest:
--
2.20.1