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

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 c0334e2f5ac5c33cfdd6488e9237ecf5afc074e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Feb 2017 18:02:52 +0100
Subject: [PATCH 1/2] Clarify CRIU related errors
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/container.go     | 10 ++++++----
 lxd/container_lxc.go | 19 ++++++-------------
 lxd/migrate.go       | 12 +++++++-----
 3 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 2721f47..c151d5f 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -4,6 +4,7 @@ import (
        "fmt"
        "io"
        "os"
+       "os/exec"
        "strings"
        "time"
 
@@ -527,15 +528,16 @@ func containerCreateAsSnapshot(d *Daemon, args 
containerArgs, sourceContainer co
        // Deal with state
        if args.Stateful {
                if !sourceContainer.IsRunning() {
-                       return nil, fmt.Errorf("Container not running, cannot 
do stateful snapshot")
+                       return nil, fmt.Errorf("Unable to create a stateful 
snapshot. The container isn't running.")
                }
 
-               if err := findCriu("snapshot"); err != nil {
-                       return nil, err
+               _, err := exec.LookPath("criu")
+               if err != nil {
+                       return nil, fmt.Errorf("Unable to create a stateful 
snapshot. CRIU isn't installed.")
                }
 
                stateDir := sourceContainer.StatePath()
-               err := os.MkdirAll(stateDir, 0700)
+               err = os.MkdirAll(stateDir, 0700)
                if err != nil {
                        return nil, err
                }
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 631ebfd..2b505b1 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -2509,8 +2509,9 @@ func (c *containerLXC) Restore(sourceContainer container) 
error {
         * filesystem manipulations
         */
        if shared.PathExists(c.StatePath()) {
-               if err := findCriu("snapshot"); err != nil {
-                       return err
+               _, err := exec.LookPath("criu")
+               if err != nil {
+                       return fmt.Errorf("Failed to restore container state. 
CRIU isn't installed.")
                }
        }
 
@@ -3897,15 +3898,6 @@ func getCRIULogErrors(imagesDir string, method string) 
(string, error) {
        return strings.Join(ret, "\n"), nil
 }
 
-func findCriu(host string) error {
-       _, err := exec.LookPath("criu")
-       if err != nil {
-               return fmt.Errorf("CRIU is required for live migration but its 
binary couldn't be found on the %s server. Is it installed in LXD's path?", 
host)
-       }
-
-       return nil
-}
-
 func (c *containerLXC) Migrate(cmd uint, stateDir string, function string, 
stop bool, actionScript bool) error {
        ctxMap := log.Ctx{"name": c.name,
                "created":      c.creationDate,
@@ -3915,8 +3907,9 @@ func (c *containerLXC) Migrate(cmd uint, stateDir string, 
function string, stop
                "actionscript": actionScript,
                "stop":         stop}
 
-       if err := findCriu(function); err != nil {
-               return err
+       _, err := exec.LookPath("criu")
+       if err != nil {
+               return fmt.Errorf("Unable to perform container live migration. 
CRIU isn't installed.")
        }
 
        shared.LogInfo("Migrating container", ctxMap)
diff --git a/lxd/migrate.go b/lxd/migrate.go
index db753d0..7e854c7 100644
--- a/lxd/migrate.go
+++ b/lxd/migrate.go
@@ -11,6 +11,7 @@ import (
        "net/http"
        "net/url"
        "os"
+       "os/exec"
        "path/filepath"
        "strings"
        "sync"
@@ -166,8 +167,9 @@ func NewMigrationSource(c container) (*migrationSourceWs, 
error) {
        }
 
        if c.IsRunning() {
-               if err := findCriu("source"); err != nil {
-                       return nil, err
+               _, err := exec.LookPath("criu")
+               if err != nil {
+                       return nil, fmt.Errorf("Unable to perform container 
live migration. CRIU isn't installed on the source server.")
                }
 
                ret.live = true
@@ -594,11 +596,11 @@ func NewMigrationSink(args *MigrationSinkArgs) 
(*migrationSink, error) {
                sink.src.live = ok
        }
 
-       err = findCriu("destination")
+       _, err = exec.LookPath("criu")
        if sink.push && sink.dest.live && err != nil {
-               return nil, err
+               return nil, fmt.Errorf("Unable to perform container live 
migration. CRIU isn't installed on the destination server.")
        } else if sink.src.live && err != nil {
-               return nil, err
+               return nil, fmt.Errorf("Unable to perform container live 
migration. CRIU isn't installed on the destination server.")
        }
 
        return &sink, nil

From 7371ead4bb98a53e13a29ff331b0649016443eb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 1 Feb 2017 19:01:47 +0100
Subject: [PATCH 2/2] Don't report migration success on failure
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/container_lxc.go | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 2b505b1..dbfbb52 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -4042,11 +4042,13 @@ func (c *containerLXC) Migrate(cmd uint, stateDir 
string, function string, stop
                        shared.LogInfo("Failed migrating container", ctxMap)
                        migrateErr = fmt.Errorf("%s %s failed\n%s", function, 
prettyCmd, log)
                }
+
+               return migrateErr
        }
 
        shared.LogInfo("Migrated container", ctxMap)
 
-       return migrateErr
+       return nil
 }
 
 func (c *containerLXC) TemplateApply(trigger string) error {
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to