From 1486a450f79995d8350e18316c6ac8eb9b35686f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cdsxing=E2=80=9D?= <“xingdashuaostar@126.com”> Date: Tue, 5 Sep 2023 10:55:43 +0800 Subject: [PATCH 1/3] context with timeout Signed-off-by: dsxing --- libcontainer/cgroups/systemd/common.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libcontainer/cgroups/systemd/common.go b/libcontainer/cgroups/systemd/common.go index 3e1a9a833e8..5ae9b5042a4 100644 --- a/libcontainer/cgroups/systemd/common.go +++ b/libcontainer/cgroups/systemd/common.go @@ -129,8 +129,10 @@ func startUnit(cm *dbusConnManager, unitName string, properties []systemdDbus.Pr retry := true retry: + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() err := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error { - _, err := c.StartTransientUnitContext(context.TODO(), unitName, "replace", properties, statusChan) + _, err := c.StartTransientUnitContext(ctx, unitName, "replace", properties, statusChan) return err }) if err != nil { @@ -178,8 +180,10 @@ retry: func stopUnit(cm *dbusConnManager, unitName string) error { statusChan := make(chan string, 1) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() err := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error { - _, err := c.StopUnitContext(context.TODO(), unitName, "replace", statusChan) + _, err := c.StopUnitContext(ctx, unitName, "replace", statusChan) return err }) if err == nil { From 4ca587f11becb183047bc8c419776eda5766080e Mon Sep 17 00:00:00 2001 From: dsxing Date: Tue, 10 Oct 2023 10:52:00 +0800 Subject: [PATCH 2/3] use the same timeout arg Signed-off-by: dsxing --- libcontainer/cgroups/systemd/common.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libcontainer/cgroups/systemd/common.go b/libcontainer/cgroups/systemd/common.go index 5ae9b5042a4..cc1321a3da4 100644 --- a/libcontainer/cgroups/systemd/common.go +++ b/libcontainer/cgroups/systemd/common.go @@ -159,9 +159,6 @@ retry: return err } - timeout := time.NewTimer(30 * time.Second) - defer timeout.Stop() - select { case s := <-statusChan: close(statusChan) @@ -170,7 +167,7 @@ retry: _ = resetFailedUnit(cm, unitName) return fmt.Errorf("error creating systemd unit `%s`: got `%s`", unitName, s) } - case <-timeout.C: + case <-ctx.Done(): _ = resetFailedUnit(cm, unitName) return errors.New("Timeout waiting for systemd to create " + unitName) } @@ -187,8 +184,6 @@ func stopUnit(cm *dbusConnManager, unitName string) error { return err }) if err == nil { - timeout := time.NewTimer(30 * time.Second) - defer timeout.Stop() select { case s := <-statusChan: @@ -197,7 +192,7 @@ func stopUnit(cm *dbusConnManager, unitName string) error { if s != "done" { logrus.Warnf("error removing unit `%s`: got `%s`. Continuing...", unitName, s) } - case <-timeout.C: + case <-ctx.Done(): return errors.New("Timed out while waiting for systemd to remove " + unitName) } } From 4e4d98c9425b3047181d8fcc0e9c52a115eca4ba Mon Sep 17 00:00:00 2001 From: dsxing Date: Tue, 24 Oct 2023 11:24:11 +0800 Subject: [PATCH 3/3] return err back Signed-off-by: dsxing --- libcontainer/cgroups/systemd/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcontainer/cgroups/systemd/common.go b/libcontainer/cgroups/systemd/common.go index cc1321a3da4..fb54ef31e61 100644 --- a/libcontainer/cgroups/systemd/common.go +++ b/libcontainer/cgroups/systemd/common.go @@ -200,7 +200,7 @@ func stopUnit(cm *dbusConnManager, unitName string) error { // In case of a failed unit, let systemd remove it. _ = resetFailedUnit(cm, unitName) - return nil + return err } func resetFailedUnit(cm *dbusConnManager, name string) error {