Add config parameter to change stop timeout during daemon shutdown
This fix tries to add a daemon config parameter `--shutdown-timeout` that specifies the timeout value to stop containers gracefully (before SIGKILL). The default value is 15s. The `--shutdown-timeout` parameter is added to daemon options and config file. It will also be updated during daemon reload. Additional test cases have been added to cover the change. This fix fixes #22471. Signed-off-by: Yong Tang <yong.tang.github@outlook.com> Upstream-commit: d7be6b2debb653739a32cfcb7c333ca062f62be0 Component: engine
This commit is contained in:
@ -2920,3 +2920,57 @@ func (s *DockerDaemonSuite) TestDaemonWithUserlandProxyPath(c *check.C) {
|
||||
c.Assert(out, checker.Contains, "driver failed programming external connectivity on endpoint")
|
||||
c.Assert(out, checker.Contains, "/does/not/exist: no such file or directory")
|
||||
}
|
||||
|
||||
// Test case for #22471
|
||||
func (s *DockerDaemonSuite) TestDaemonShutdownTimeout(c *check.C) {
|
||||
testRequires(c, SameHostDaemon)
|
||||
|
||||
c.Assert(s.d.StartWithBusybox("--shutdown-timeout=3"), check.IsNil)
|
||||
|
||||
_, err := s.d.Cmd("run", "-d", "busybox", "top")
|
||||
c.Assert(err, check.IsNil)
|
||||
|
||||
syscall.Kill(s.d.cmd.Process.Pid, syscall.SIGINT)
|
||||
|
||||
select {
|
||||
case <-s.d.wait:
|
||||
case <-time.After(5 * time.Second):
|
||||
}
|
||||
|
||||
expectedMessage := `level=debug msg="start clean shutdown of all containers with a 3 seconds timeout..."`
|
||||
content, _ := ioutil.ReadFile(s.d.logFile.Name())
|
||||
c.Assert(string(content), checker.Contains, expectedMessage)
|
||||
}
|
||||
|
||||
// Test case for #22471
|
||||
func (s *DockerDaemonSuite) TestDaemonShutdownTimeoutWithConfigFile(c *check.C) {
|
||||
testRequires(c, SameHostDaemon)
|
||||
|
||||
// daemon config file
|
||||
configFilePath := "test.json"
|
||||
configFile, err := os.Create(configFilePath)
|
||||
c.Assert(err, checker.IsNil)
|
||||
defer os.Remove(configFilePath)
|
||||
|
||||
daemonConfig := `{ "shutdown-timeout" : 8 }`
|
||||
fmt.Fprintf(configFile, "%s", daemonConfig)
|
||||
configFile.Close()
|
||||
c.Assert(s.d.Start(fmt.Sprintf("--config-file=%s", configFilePath)), check.IsNil)
|
||||
|
||||
configFile, err = os.Create(configFilePath)
|
||||
c.Assert(err, checker.IsNil)
|
||||
daemonConfig = `{ "shutdown-timeout" : 5 }`
|
||||
fmt.Fprintf(configFile, "%s", daemonConfig)
|
||||
configFile.Close()
|
||||
|
||||
syscall.Kill(s.d.cmd.Process.Pid, syscall.SIGHUP)
|
||||
|
||||
select {
|
||||
case <-s.d.wait:
|
||||
case <-time.After(3 * time.Second):
|
||||
}
|
||||
|
||||
expectedMessage := `level=debug msg="Reset Shutdown Timeout: 5"`
|
||||
content, _ := ioutil.ReadFile(s.d.logFile.Name())
|
||||
c.Assert(string(content), checker.Contains, expectedMessage)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user