The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7229
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Fixes https://github.com/lxc/lxd/issues/7223
From d40b4416e9b1e19fd003547199df04d27acd8e3a Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Mon, 20 Apr 2020 17:35:03 +0100 Subject: [PATCH 1/3] lxd/instance/drivers/driver/qemu: Wait for onStop when restarting Fixes #7223 Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/instance/drivers/driver_qemu.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go index 38df3d9e5c..5a57f4ba56 100644 --- a/lxd/instance/drivers/driver_qemu.go +++ b/lxd/instance/drivers/driver_qemu.go @@ -562,9 +562,7 @@ func (vm *qemu) Shutdown(timeout time.Duration) error { if timeout > 0 { select { case <-chDisconnect: - op.Done(nil) - vm.state.Events.SendLifecycle(vm.project, "instance-shutdown", fmt.Sprintf("/1.0/virtual-machines/%s", vm.name), nil) - return nil + break case <-time.After(timeout): op.Done(fmt.Errorf("Instance was not shutdown after timeout")) return fmt.Errorf("Instance was not shutdown after timeout") @@ -573,6 +571,12 @@ func (vm *qemu) Shutdown(timeout time.Duration) error { <-chDisconnect // Block until VM is not running if no timeout provided. } + // Wait for onStop. + err = op.Wait() + if err != nil && vm.IsRunning() { + return err + } + op.Done(nil) vm.state.Events.SendLifecycle(vm.project, "instance-shutdown", fmt.Sprintf("/1.0/virtual-machines/%s", vm.name), nil) return nil From 7839cf599c52e8b3b1dbb27385be365afa73ddfa Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Mon, 20 Apr 2020 17:36:54 +0100 Subject: [PATCH 2/3] lxd/instance/drivers/driver/qemu: Makes onStop unexported Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/instance/drivers/driver_qemu.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go index 5a57f4ba56..1e79d38cbe 100644 --- a/lxd/instance/drivers/driver_qemu.go +++ b/lxd/instance/drivers/driver_qemu.go @@ -370,7 +370,7 @@ func (vm *qemu) getMonitorEventHandler() func(event string, data map[string]inte target = "reboot" } - err = inst.(*qemu).OnStop(target) + err = inst.(*qemu).onStop(target) if err != nil { logger.Errorf("Failed to cleanly stop instance '%s': %v", project.Instance(inst.Project(), inst.Name()), err) return @@ -480,8 +480,8 @@ func (vm *qemu) Freeze() error { return nil } -// OnStop is run when the instance stops. -func (vm *qemu) OnStop(target string) error { +// onStop is run when the instance stops. +func (vm *qemu) onStop(target string) error { // Pick up the existing stop operation lock created in Stop() function. op := operationlock.Get(vm.id) if op != nil && op.Action() != "stop" { @@ -1982,7 +1982,7 @@ func (vm *qemu) Stop(stateful bool) error { // Wait for QEMU to exit (can take a while if pending I/O). <-chDisconnect - // Wait for OnStop. + // Wait for onStop. err = op.Wait() if err != nil && vm.IsRunning() { return err From b57d956008b8bb2134e78c4e6b39b5fd0a5795c5 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Mon, 20 Apr 2020 17:37:12 +0100 Subject: [PATCH 3/3] lxd/instance/drivers/driver/qemu: Comment Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/instance/drivers/driver_qemu.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go index 1e79d38cbe..99e41f78ce 100644 --- a/lxd/instance/drivers/driver_qemu.go +++ b/lxd/instance/drivers/driver_qemu.go @@ -1929,7 +1929,7 @@ func (vm *qemu) pid() (int, error) { return pid, nil } -// Stop stops the VM. +// Stop the VM. func (vm *qemu) Stop(stateful bool) error { // Check that we're not already stopped. if !vm.IsRunning() {
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel