summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2021-09-29 10:03:46 -0400
committerDaniel J Walsh <dwalsh@redhat.com>2021-10-08 07:06:37 -0400
commit48d26a893e0adcf5f9b339a675bfffe688a9ea22 (patch)
tree6b889b7972e9ed0a1390bc256e98b2a7d1e2d87d
parent14c0fcc6b7b3e8c1f28efea329ab9a6bf0d99b70 (diff)
downloadpodman-48d26a893e0adcf5f9b339a675bfffe688a9ea22.tar.gz
podman-48d26a893e0adcf5f9b339a675bfffe688a9ea22.tar.bz2
podman-48d26a893e0adcf5f9b339a675bfffe688a9ea22.zip
Warn if podman stop timeout expires that sigkill was sent
Note: the Warning message will not come to podman-remote. It would be difficult to plumb, and not really worth the effort. Fixes: https://github.com/containers/podman/issues/11854 Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
-rw-r--r--libpod/oci_conmon_linux.go3
-rw-r--r--test/e2e/stop_test.go12
-rw-r--r--test/system/050-stop.bats7
3 files changed, 21 insertions, 1 deletions
diff --git a/libpod/oci_conmon_linux.go b/libpod/oci_conmon_linux.go
index 0369a9977..1719b2dfa 100644
--- a/libpod/oci_conmon_linux.go
+++ b/libpod/oci_conmon_linux.go
@@ -441,7 +441,8 @@ func (r *ConmonOCIRuntime) StopContainer(ctr *Container, timeout uint, all bool)
}
if err := waitContainerStop(ctr, time.Duration(timeout)*time.Second); err != nil {
- logrus.Infof("Timed out stopping container %s, resorting to SIGKILL: %v", ctr.ID(), err)
+ logrus.Debugf("Timed out stopping container %s with %s, resorting to SIGKILL: %v", ctr.ID(), unix.SignalName(syscall.Signal(stopSignal)), err)
+ logrus.Warnf("StopSignal %s failed to stop container %s in %d seconds, resorting to SIGKILL", unix.SignalName(syscall.Signal(stopSignal)), ctr.Name(), timeout)
} else {
// No error, the container is dead
return nil
diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go
index 7f178d719..fb8f92e0f 100644
--- a/test/e2e/stop_test.go
+++ b/test/e2e/stop_test.go
@@ -181,6 +181,18 @@ var _ = Describe("Podman stop", func() {
Expect(strings.TrimSpace(finalCtrs.OutputToString())).To(Equal(""))
})
+ It("podman stop container --timeout Warning", func() {
+ SkipIfRemote("warning will happen only on server side")
+ session := podmanTest.Podman([]string{"run", "-d", "--name", "test5", ALPINE, "sleep", "100"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ session = podmanTest.Podman([]string{"stop", "--timeout", "1", "test5"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ warning := session.ErrorToString()
+ Expect(warning).To(ContainSubstring("StopSignal SIGTERM failed to stop container test5 in 1 seconds, resorting to SIGKILL"))
+ })
+
It("podman stop latest containers", func() {
SkipIfRemote("--latest flag n/a")
session := podmanTest.RunTopContainer("test1")
diff --git a/test/system/050-stop.bats b/test/system/050-stop.bats
index d809507a5..e049da518 100644
--- a/test/system/050-stop.bats
+++ b/test/system/050-stop.bats
@@ -166,4 +166,11 @@ load helpers
is "$output" "137" "Exit code of killed container"
}
+@test "podman stop -t 1 Generate warning" {
+ skip_if_remote "warning only happens on server side"
+ run_podman run --rm --name stopme -d $IMAGE sleep 100
+ run_podman stop -t 1 stopme
+ is "$output" ".*StopSignal SIGTERM failed to stop container stopme in 1 seconds, resorting to SIGKILL" "stopping container should print warning"
+}
+
# vim: filetype=sh