[lxc-devel] [lxd/master] lxd/containers: Fix cleanup on create failure

stgraber on Github lxc-bot at linuxcontainers.org
Wed Sep 26 14:43:51 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 370 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180926/4428111a/attachment.bin>
-------------- next part --------------
From 39c3182b6717bed3418d7cc8eaf4e9c652f09a03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 26 Sep 2018 10:41:44 -0400
Subject: [PATCH] lxd/containers: Fix cleanup on create failure
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #5036

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container.go | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index a6136eb16b..f4cc17bedf 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -655,7 +655,7 @@ func containerCreateAsEmpty(d *Daemon, args db.ContainerArgs) (container, error)
 	// Now create the empty storage
 	err = c.Storage().ContainerCreate(c)
 	if err != nil {
-		d.cluster.ContainerRemove(args.Name)
+		c.Delete()
 		return nil, err
 	}
 
@@ -742,7 +742,7 @@ func containerCreateEmptySnapshot(s *state.State, args db.ContainerArgs) (contai
 	// Now create the empty snapshot
 	err = c.Storage().ContainerSnapshotCreateEmpty(c)
 	if err != nil {
-		s.Cluster.ContainerRemove(args.Name)
+		c.Delete()
 		return nil, err
 	}
 
@@ -799,14 +799,14 @@ func containerCreateFromImage(d *Daemon, args db.ContainerArgs, hash string) (co
 
 	err = s.Cluster.ImageLastAccessUpdate(hash, time.Now().UTC())
 	if err != nil {
-		s.Cluster.ContainerRemove(args.Name)
+		c.Delete()
 		return nil, fmt.Errorf("Error updating image last use date: %s", err)
 	}
 
 	// Now create the storage from an image
 	err = c.Storage().ContainerCreateFromImage(c, hash)
 	if err != nil {
-		s.Cluster.ContainerRemove(args.Name)
+		c.Delete()
 		return nil, err
 	}
 
@@ -841,7 +841,7 @@ func containerCreateAsCopy(s *state.State, args db.ContainerArgs, sourceContaine
 	if !containerOnly {
 		snapshots, err := sourceContainer.Snapshots()
 		if err != nil {
-			s.Cluster.ContainerRemove(args.Name)
+			ct.Delete()
 			return nil, err
 		}
 
@@ -882,6 +882,7 @@ func containerCreateAsCopy(s *state.State, args db.ContainerArgs, sourceContaine
 			// Create the snapshots.
 			cs, err := containerCreateInternal(s, csArgs)
 			if err != nil {
+				ct.Delete()
 				return nil, err
 			}
 
@@ -892,10 +893,7 @@ func containerCreateAsCopy(s *state.State, args db.ContainerArgs, sourceContaine
 	// Now clone the storage.
 	err = ct.Storage().ContainerCopy(ct, sourceContainer, containerOnly)
 	if err != nil {
-		for _, v := range csList {
-			s.Cluster.ContainerRemove((*v).Name())
-		}
-		s.Cluster.ContainerRemove(args.Name)
+		ct.Delete()
 		return nil, err
 	}
 
@@ -911,7 +909,7 @@ func containerCreateAsCopy(s *state.State, args db.ContainerArgs, sourceContaine
 			// Apply any post-storage configuration.
 			err = containerConfigureInternal(*cs)
 			if err != nil {
-				(*cs).Delete()
+				ct.Delete()
 				return nil, err
 			}
 		}
@@ -974,12 +972,13 @@ func containerCreateAsSnapshot(s *state.State, args db.ContainerArgs, sourceCont
 	// Clone the container
 	err = sourceContainer.Storage().ContainerSnapshotCreate(c, sourceContainer)
 	if err != nil {
-		s.Cluster.ContainerRemove(args.Name)
+		c.Delete()
 		return nil, err
 	}
 
 	ourStart, err := c.StorageStart()
 	if err != nil {
+		c.Delete()
 		return nil, err
 	}
 	if ourStart {


More information about the lxc-devel mailing list