diff --git a/client/driver/driver.go b/client/driver/driver.go index f92b84fad..ecd0c0271 100644 --- a/client/driver/driver.go +++ b/client/driver/driver.go @@ -89,6 +89,12 @@ func NewDriverContext(taskName string, config *config.Config, node *structs.Node func (d *DriverContext) KillTimeout(task *structs.Task) time.Duration { max := d.config.MaxKillTimeout.Nanoseconds() desired := task.KillTimeout.Nanoseconds() + + // Make the minimum time between signal and kill, 1 second. + if desired == 0 { + desired = (1 * time.Second).Nanoseconds() + } + if desired < max { return task.KillTimeout } diff --git a/client/driver/driver_test.go b/client/driver/driver_test.go index 0ab20d813..f76f8c68e 100644 --- a/client/driver/driver_test.go +++ b/client/driver/driver_test.go @@ -46,6 +46,7 @@ func testConfig() *config.Config { conf := &config.Config{} conf.StateDir = os.TempDir() conf.AllocDir = os.TempDir() + conf.MaxKillTimeout = 10 * time.Second return conf } diff --git a/client/driver/exec.go b/client/driver/exec.go index 533ff4dd8..eed58a796 100644 --- a/client/driver/exec.go +++ b/client/driver/exec.go @@ -227,7 +227,10 @@ func (h *execHandle) Update(task *structs.Task) error { } func (h *execHandle) Kill() error { - h.executor.ShutDown() + if err := h.executor.ShutDown(); err != nil { + return fmt.Errorf("executor Shutdown failed: %v", err) + } + select { case <-h.doneCh: return nil @@ -235,8 +238,11 @@ func (h *execHandle) Kill() error { if h.pluginClient.Exited() { return nil } - err := h.executor.Exit() - return err + if err := h.executor.Exit(); err != nil { + return fmt.Errorf("executor Exit failed: %v", err) + } + + return nil } } diff --git a/client/driver/exec_test.go b/client/driver/exec_test.go index 76009316c..de02f4959 100644 --- a/client/driver/exec_test.go +++ b/client/driver/exec_test.go @@ -322,7 +322,7 @@ func TestExecDriver_Start_Kill_Wait(t *testing.T) { Name: "sleep", Config: map[string]interface{}{ "command": "/bin/sleep", - "args": []string{"10"}, + "args": []string{"45"}, }, Resources: basicResources, } diff --git a/client/driver/raw_exec_test.go b/client/driver/raw_exec_test.go index 08f578a06..a09010d3e 100644 --- a/client/driver/raw_exec_test.go +++ b/client/driver/raw_exec_test.go @@ -287,7 +287,7 @@ func TestRawExecDriver_Start_Kill_Wait(t *testing.T) { Name: "sleep", Config: map[string]interface{}{ "command": testtask.Path(), - "args": []string{"sleep", "15s"}, + "args": []string{"sleep", "45s"}, }, Resources: basicResources, }