From 258fab136af6645722325a5155a0fe6f0e960eda Mon Sep 17 00:00:00 2001 From: Luiz Aoqui Date: Thu, 4 Aug 2022 10:44:08 -0400 Subject: [PATCH] qemu: restore monitor socket path (#14000) When a QEMU task is recovered the monitor socket path was not being restored into the task handler, so the `graceful_shutdown` configuration was effectively ignored if the client restarted. --- .changelog/14000.txt | 3 +++ drivers/qemu/driver.go | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 .changelog/14000.txt diff --git a/.changelog/14000.txt b/.changelog/14000.txt new file mode 100644 index 000000000..3db5ca3b6 --- /dev/null +++ b/.changelog/14000.txt @@ -0,0 +1,3 @@ +```release-note:bug +qemu: restore the monitor socket path when restoring a QEMU task. +``` diff --git a/drivers/qemu/driver.go b/drivers/qemu/driver.go index 23c127ee5..b6fe6041b 100644 --- a/drivers/qemu/driver.go +++ b/drivers/qemu/driver.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net" + "os" "os/exec" "path/filepath" "regexp" @@ -304,9 +305,19 @@ func (d *Driver) RecoverTask(handle *drivers.TaskHandle) error { return fmt.Errorf("failed to reattach to executor: %v", err) } + // Try to restore monitor socket path. + taskDir := filepath.Join(handle.Config.AllocDir, handle.Config.Name) + monitorPath := filepath.Join(taskDir, qemuMonitorSocketName) + if _, err := os.Stat(monitorPath); err == nil { + d.logger.Debug("found existing monitor socket", "monitor", monitorPath) + } else { + monitorPath = "" + } + h := &taskHandle{ exec: execImpl, pid: taskState.Pid, + monitorPath: monitorPath, pluginClient: pluginClient, taskConfig: taskState.TaskConfig, procState: drivers.TaskStateRunning,