From ac9547e6b2d47a49f8ad27ad2a3a25b7e04b0f38 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Fri, 22 Nov 2019 10:44:59 -0500 Subject: [PATCH 1/2] drivers: always initialize taskHandle.logger Looks like the RecoverTask doesn't set taskHandle.logger field causing a panic when the handle attempts to log (e.g. when Shutdown or Signaling fails). --- drivers/exec/driver.go | 1 + drivers/exec/driver_pre09.go | 1 + drivers/java/driver.go | 1 + drivers/java/driver_pre09.go | 1 + drivers/qemu/driver.go | 1 + drivers/qemu/driver_pre09.go | 1 + drivers/rkt/driver.go | 1 + drivers/rkt/driver_pre09.go | 1 + 8 files changed, 8 insertions(+) diff --git a/drivers/exec/driver.go b/drivers/exec/driver.go index 6611ec472ce9..6c0bf7c99e03 100644 --- a/drivers/exec/driver.go +++ b/drivers/exec/driver.go @@ -304,6 +304,7 @@ func (d *Driver) RecoverTask(handle *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: taskState.StartedAt, exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(taskState.TaskConfig.ID, h) diff --git a/drivers/exec/driver_pre09.go b/drivers/exec/driver_pre09.go index 5b063ea24eba..607142d9e2cd 100644 --- a/drivers/exec/driver_pre09.go +++ b/drivers/exec/driver_pre09.go @@ -36,6 +36,7 @@ func (d *Driver) recoverPre09Task(h *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: time.Now(), exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(h.Config.ID, th) diff --git a/drivers/java/driver.go b/drivers/java/driver.go index ac35aa82d72f..02931cdcf4ca 100644 --- a/drivers/java/driver.go +++ b/drivers/java/driver.go @@ -290,6 +290,7 @@ func (d *Driver) RecoverTask(handle *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: taskState.StartedAt, exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(taskState.TaskConfig.ID, h) diff --git a/drivers/java/driver_pre09.go b/drivers/java/driver_pre09.go index 80d1fc5cad1a..9f1b3f31f9b5 100644 --- a/drivers/java/driver_pre09.go +++ b/drivers/java/driver_pre09.go @@ -36,6 +36,7 @@ func (d *Driver) recoverPre09Task(h *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: time.Now(), exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(h.Config.ID, th) diff --git a/drivers/qemu/driver.go b/drivers/qemu/driver.go index 156dd1104b74..f24bda73d668 100644 --- a/drivers/qemu/driver.go +++ b/drivers/qemu/driver.go @@ -286,6 +286,7 @@ func (d *Driver) RecoverTask(handle *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: taskState.StartedAt, exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(taskState.TaskConfig.ID, h) diff --git a/drivers/qemu/driver_pre09.go b/drivers/qemu/driver_pre09.go index 10d810ee0493..eeef3d29ffc3 100644 --- a/drivers/qemu/driver_pre09.go +++ b/drivers/qemu/driver_pre09.go @@ -36,6 +36,7 @@ func (d *Driver) recoverPre09Task(h *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: time.Now(), exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(h.Config.ID, th) diff --git a/drivers/rkt/driver.go b/drivers/rkt/driver.go index 238dcfc77394..6de9f4dfe356 100644 --- a/drivers/rkt/driver.go +++ b/drivers/rkt/driver.go @@ -405,6 +405,7 @@ func (d *Driver) RecoverTask(handle *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: taskState.StartedAt, exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(taskState.TaskConfig.ID, h) diff --git a/drivers/rkt/driver_pre09.go b/drivers/rkt/driver_pre09.go index e974e9c09549..a30c80ad4a5e 100644 --- a/drivers/rkt/driver_pre09.go +++ b/drivers/rkt/driver_pre09.go @@ -36,6 +36,7 @@ func (d *Driver) recoverPre09Task(h *drivers.TaskHandle) error { procState: drivers.TaskStateRunning, startedAt: time.Now(), exitResult: &drivers.ExitResult{}, + logger: d.logger, } d.tasks.Set(h.Config.ID, th) From dd46c985d5db314d41a4d29742c560058893a312 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Fri, 22 Nov 2019 11:04:24 -0500 Subject: [PATCH 2/2] changelog [ci skip] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 425cfb9cc020..4693be800ca4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ BUG FIXES: * cli: Fixed a bug where a cli user may fail to query FS/Allocation API endpoints if they lack `node:read` capability [[GH-6423](https://github.com/hashicorp/nomad/issues/6423)] * client: client: Return empty values when host stats fail [[GH-6349](https://github.com/hashicorp/nomad/issues/6349)] * client: Fixed a bug where a client may not restart dead internal processes upon client's restart on Windows [[GH-6426](https://github.com/hashicorp/nomad/issues/6426)] + * drivers: Fixed a bug where client may panic if a restored task failed to shutdown cleanly [[GH-6763](https://github.com/hashicorp/nomad/issues/6763)] * driver/exec: Fixed a bug where exec tasks can spawn processes that live beyond task lifecycle [[GH-6722](https://github.com/hashicorp/nomad/issues/6722)] * driver/docker: Added mechanism for detecting running unexpectedly running docker containers [[GH-6325](https://github.com/hashicorp/nomad/issues/6325)] * nomad: Fixed registering multiple connect enabled services in the same task group [[GH-6646](https://github.com/hashicorp/nomad/issues/6646)]