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

Reply via email to