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
