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

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) ===
Closes #3782.

Signed-off-by: Christian Brauner <[email protected]>
From bddaa8238a37264348c758bad81ed9dd9bdf021e Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Fri, 8 Sep 2017 00:41:30 +0200
Subject: [PATCH] container: remove from db on storage failure

Closes #3782.

Signed-off-by: Christian Brauner <[email protected]>
---
 lxd/container.go | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 295d1c579..a427ae84a 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -510,7 +510,7 @@ func containerCreateAsEmpty(d *Daemon, args 
db.ContainerArgs) (container, error)
 
        // Now create the empty storage
        if err := c.Storage().ContainerCreate(c); err != nil {
-               c.Delete()
+               db.ContainerRemove(d.db, args.Name)
                return nil, err
        }
 
@@ -533,7 +533,7 @@ func containerCreateEmptySnapshot(s *state.State, args 
db.ContainerArgs) (contai
 
        // Now create the empty snapshot
        if err := c.Storage().ContainerSnapshotCreateEmpty(c); err != nil {
-               c.Delete()
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
 
@@ -564,12 +564,13 @@ func containerCreateFromImage(s *state.State, args 
db.ContainerArgs, hash string
        }
 
        if err := db.ImageLastAccessUpdate(s.DB, hash, time.Now().UTC()); err 
!= nil {
+               db.ContainerRemove(s.DB, args.Name)
                return nil, fmt.Errorf("Error updating image last use date: 
%s", err)
        }
 
        // Now create the storage from an image
        if err := c.Storage().ContainerCreateFromImage(c, hash); err != nil {
-               c.Delete()
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
 
@@ -594,6 +595,7 @@ func containerCreateAsCopy(s *state.State, args 
db.ContainerArgs, sourceContaine
        if !containerOnly {
                snapshots, err := sourceContainer.Snapshots()
                if err != nil {
+                       db.ContainerRemove(s.DB, args.Name)
                        return nil, err
                }
 
@@ -623,7 +625,10 @@ func containerCreateAsCopy(s *state.State, args 
db.ContainerArgs, sourceContaine
 
        // Now clone the storage.
        if err := ct.Storage().ContainerCopy(ct, sourceContainer, 
containerOnly); err != nil {
-               ct.Delete()
+               for _, v := range csList {
+                       db.ContainerRemove(s.DB, (*v).Name())
+               }
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
 
@@ -691,7 +696,7 @@ func containerCreateAsSnapshot(s *state.State, args 
db.ContainerArgs, sourceCont
 
        // Clone the container
        if err := sourceContainer.Storage().ContainerSnapshotCreate(c, 
sourceContainer); err != nil {
-               c.Delete()
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
 
@@ -802,6 +807,7 @@ func containerCreateInternal(s *state.State, args 
db.ContainerArgs) (container,
        // Read the timestamp from the database
        dbArgs, err := db.ContainerGet(s.DB, args.Name)
        if err != nil {
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
        args.CreationDate = dbArgs.CreationDate
@@ -810,6 +816,7 @@ func containerCreateInternal(s *state.State, args 
db.ContainerArgs) (container,
        // Setup the container struct and finish creation (storage and idmap)
        c, err := containerLXCCreate(s, args)
        if err != nil {
+               db.ContainerRemove(s.DB, args.Name)
                return nil, err
        }
 
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to