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