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
