The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8078
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) ===
From 11239b22efea6000b56396335373ca94a0f2db83 Mon Sep 17 00:00:00 2001 From: Daniel Segal <dlem...@gmail.com> Date: Thu, 22 Oct 2020 22:45:05 +0300 Subject: [PATCH] extract restart logic to new instance interface function of lxc and qemu Signed-off-by: Daniel Segal <dlem...@gmail.com> --- lxd/instance/drivers/driver_lxc.go | 19 +++++++++++++++++++ lxd/instance/drivers/driver_qemu.go | 19 +++++++++++++++++++ lxd/instance/instance_interface.go | 1 + lxd/instance_state.go | 25 ++++--------------------- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/lxd/instance/drivers/driver_lxc.go b/lxd/instance/drivers/driver_lxc.go index ccb8945587..b02928e5c9 100644 --- a/lxd/instance/drivers/driver_lxc.go +++ b/lxd/instance/drivers/driver_lxc.go @@ -2786,6 +2786,25 @@ func (c *lxc) Shutdown(timeout time.Duration) error { return nil } +// Restart restart the instance. +func (c *lxc) Restart(timeout time.Duration) error { + if timeout == 0 { + if err := c.Stop(false); err != nil { + return err + } + } else { + if c.IsFrozen() { + return errors.New("Instance is not running") + } + + if err := c.Shutdown(timeout * time.Second); err != nil { + return err + } + } + + return c.Start(false) +} + // onStopNS is triggered by LXC's stop hook once a container is shutdown but before the container's // namespaces have been closed. The netns path of the stopped container is provided. func (c *lxc) onStopNS(args map[string]string) error { diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go index d1436b9263..1a8798ad9d 100644 --- a/lxd/instance/drivers/driver_qemu.go +++ b/lxd/instance/drivers/driver_qemu.go @@ -629,6 +629,25 @@ func (vm *qemu) Shutdown(timeout time.Duration) error { return nil } +// Restart restart the instance. +func (vm *qemu) Restart(timeout time.Duration) error { + if timeout == 0 { + if err := vm.Stop(false); err != nil { + return err + } + } else { + if vm.IsFrozen() { + return errors.New("Instance is not running") + } + + if err := vm.Shutdown(timeout * time.Second); err != nil { + return err + } + } + + return vm.Start(false) +} + func (vm *qemu) ovmfPath() string { if os.Getenv("LXD_OVMF_PATH") != "" { return os.Getenv("LXD_OVMF_PATH") diff --git a/lxd/instance/instance_interface.go b/lxd/instance/instance_interface.go index e49458bd86..02f675c227 100644 --- a/lxd/instance/instance_interface.go +++ b/lxd/instance/instance_interface.go @@ -50,6 +50,7 @@ type Instance interface { Shutdown(timeout time.Duration) error Start(stateful bool) error Stop(stateful bool) error + Restart(timeout time.Duration) error Unfreeze() error RegisterDevices() SaveConfigFile() error diff --git a/lxd/instance_state.go b/lxd/instance_state.go index b0fab52b0b..dfcb4b15be 100644 --- a/lxd/instance_state.go +++ b/lxd/instance_state.go @@ -167,28 +167,11 @@ func containerStatePut(d *Daemon, r *http.Request) response.Response { }() } - if raw.Timeout == 0 || raw.Force { - err = c.Stop(false) - if err != nil { - return err - } - } else { - if c.IsFrozen() { - return fmt.Errorf("Instance is not running") - } - - err = c.Shutdown(time.Duration(raw.Timeout) * time.Second) - if err != nil { - return err - } - } - - err = c.Start(false) - if err != nil { - return err + timeout := raw.Timeout + if raw.Force { + timeout = 0 } - - return nil + return c.Restart(time.Duration(timeout)) } case shared.Freeze: if !d.os.CGInfo.Supports(cgroup.Freezer, nil) {
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel