The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3633

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 437d5460866d35460aecbb5ad48c144776c36b10 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Fri, 4 Aug 2017 15:47:20 -0400
Subject: [PATCH 1/2] daemon: Use select and save goroutines
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/main_daemon.go | 53 ++++++++++++++++-------------------------------------
 1 file changed, 16 insertions(+), 37 deletions(-)

diff --git a/lxd/main_daemon.go b/lxd/main_daemon.go
index e78db8ff9..5b720967d 100644
--- a/lxd/main_daemon.go
+++ b/lxd/main_daemon.go
@@ -6,7 +6,6 @@ import (
        "os/exec"
        "os/signal"
        "runtime/pprof"
-       "sync"
        "syscall"
        "time"
 
@@ -62,46 +61,26 @@ func cmdDaemon() error {
                return err
        }
 
-       var ret error
-       var wg sync.WaitGroup
-       wg.Add(1)
+       ch := make(chan os.Signal)
+       signal.Notify(ch, syscall.SIGPWR)
+       signal.Notify(ch, syscall.SIGINT)
+       signal.Notify(ch, syscall.SIGQUIT)
+       signal.Notify(ch, syscall.SIGTERM)
 
-       go func() {
-               ch := make(chan os.Signal)
-               signal.Notify(ch, syscall.SIGPWR)
-               sig := <-ch
+       select {
+       case sig := <-ch:
 
-               logger.Infof("Received '%s signal', shutting down containers.", 
sig)
-
-               containersShutdown(d)
-
-               ret = d.Stop()
-               wg.Done()
-       }()
-
-       go func() {
-               <-d.shutdownChan
+               if sig == syscall.SIGPWR {
+                       logger.Infof("Received '%s signal', shutting down 
containers.", sig)
+                       containersShutdown(d)
+               } else {
+                       logger.Infof("Received '%s signal', exiting.", sig)
+               }
 
+       case <-d.shutdownChan:
                logger.Infof("Asked to shutdown by API, shutting down 
containers.")
-
                containersShutdown(d)
+       }
 
-               ret = d.Stop()
-               wg.Done()
-       }()
-
-       go func() {
-               ch := make(chan os.Signal)
-               signal.Notify(ch, syscall.SIGINT)
-               signal.Notify(ch, syscall.SIGQUIT)
-               signal.Notify(ch, syscall.SIGTERM)
-               sig := <-ch
-
-               logger.Infof("Received '%s signal', exiting.", sig)
-               ret = d.Stop()
-               wg.Done()
-       }()
-
-       wg.Wait()
-       return ret
+       return d.Stop()
 }

From 253ae7534d36d2601221623b14951e8aaa9bf2a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Fri, 4 Aug 2017 16:01:14 -0400
Subject: [PATCH 2/2] networks: Stop networks on clean shutdown
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/main_daemon.go |  2 ++
 lxd/networks.go    | 27 +++++++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/lxd/main_daemon.go b/lxd/main_daemon.go
index 5b720967d..7195e3551 100644
--- a/lxd/main_daemon.go
+++ b/lxd/main_daemon.go
@@ -73,6 +73,7 @@ func cmdDaemon() error {
                if sig == syscall.SIGPWR {
                        logger.Infof("Received '%s signal', shutting down 
containers.", sig)
                        containersShutdown(d)
+                       networkShutdown(d)
                } else {
                        logger.Infof("Received '%s signal', exiting.", sig)
                }
@@ -80,6 +81,7 @@ func cmdDaemon() error {
        case <-d.shutdownChan:
                logger.Infof("Asked to shutdown by API, shutting down 
containers.")
                containersShutdown(d)
+               networkShutdown(d)
        }
 
        return d.Stop()
diff --git a/lxd/networks.go b/lxd/networks.go
index 6f4464409..608a91bf3 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -420,6 +420,33 @@ func networkStartup(d *Daemon) error {
        return nil
 }
 
+func networkShutdown(d *Daemon) error {
+       // Get a list of managed networks
+       networks, err := dbNetworks(d.db)
+       if err != nil {
+               return err
+       }
+
+       // Bring them all up
+       for _, name := range networks {
+               n, err := networkLoadByName(d, name)
+               if err != nil {
+                       return err
+               }
+
+               if !n.IsRunning() {
+                       continue
+               }
+
+               err = n.Stop()
+               if err != nil {
+                       logger.Error("Failed to bring down network", 
log.Ctx{"err": err, "name": name})
+               }
+       }
+
+       return nil
+}
+
 type network struct {
        // Properties
        daemon      *Daemon
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to