From 90f512427f3a10144a8f589ea9b18d36cf48b94c Mon Sep 17 00:00:00 2001 From: mYmNeo Date: Wed, 6 Apr 2016 09:45:30 +0800 Subject: [PATCH 1/3] fix test requirement about devicemapper and not overlay Signed-off-by: mYmNeo --- integration-cli/docker_test_vars.go | 5 +++++ integration-cli/docker_utils.go | 1 + integration-cli/requirements.go | 12 ++---------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/integration-cli/docker_test_vars.go b/integration-cli/docker_test_vars.go index a7791760ea..b6113992e0 100644 --- a/integration-cli/docker_test_vars.go +++ b/integration-cli/docker_test_vars.go @@ -54,6 +54,11 @@ var ( dockerBasePath string volumesConfigPath string containerStoragePath string + + // daemonStorageDriver is held globally so that tests can know the storage + // driver of the daemon. This is initialized in docker_utils by sending + // a version call to the daemon and examining the response header. + daemonStorageDriver string ) const ( diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index ce7cfe6e88..a994c79785 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -67,6 +67,7 @@ func init() { panic(fmt.Errorf("Init failed to unmarshal docker info: %v", err)) } + daemonStorageDriver = info.Driver dockerBasePath = info.DockerRootDir volumesConfigPath = filepath.Join(dockerBasePath, "volumes") containerStoragePath = filepath.Join(dockerBasePath, "containers") diff --git a/integration-cli/requirements.go b/integration-cli/requirements.go index 4bc2b654da..e948c0aae0 100644 --- a/integration-cli/requirements.go +++ b/integration-cli/requirements.go @@ -109,22 +109,14 @@ var ( } NotOverlay = testRequirement{ func() bool { - cmd := exec.Command("grep", "^overlay / overlay", "/proc/mounts") - if err := cmd.Run(); err != nil { - return true - } - return false + return !strings.HasPrefix(daemonStorageDriver, "overlay") }, "Test requires underlying root filesystem not be backed by overlay.", } Devicemapper = testRequirement{ func() bool { - cmd := exec.Command("grep", "^devicemapper / devicemapper", "/proc/mounts") - if err := cmd.Run(); err != nil { - return false - } - return true + return strings.HasPrefix(daemonStorageDriver, "devicemapper") }, "Test requires underlying root filesystem to be backed by devicemapper.", } From ce87de21a7594f5d49987a7333f1f0e77984f117 Mon Sep 17 00:00:00 2001 From: mYmNeo Date: Fri, 1 Apr 2016 14:52:29 +0800 Subject: [PATCH 2/3] fix TestCreateShrinkRootfs and TestCreateShrinkRootfs Signed-off-by: mYmNeo --- integration-cli/docker_cli_create_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/integration-cli/docker_cli_create_test.go b/integration-cli/docker_cli_create_test.go index 23098da2b2..9649482414 100644 --- a/integration-cli/docker_cli_create_test.go +++ b/integration-cli/docker_cli_create_test.go @@ -68,15 +68,15 @@ func (s *DockerSuite) TestCreateGrowRootfs(c *check.C) { cleanedContainerID := strings.TrimSpace(out) inspectOut := inspectField(c, cleanedContainerID, "HostConfig.StorageOpt") - c.Assert(inspectOut, checker.Equals, "[size=120G]") + c.Assert(inspectOut, checker.Equals, "map[size:120G]") } // Make sure we cannot shrink the container's rootfs at creation time. func (s *DockerSuite) TestCreateShrinkRootfs(c *check.C) { testRequires(c, Devicemapper) - // Ensure this fails - out, _, err := dockerCmdWithError("create", "--storage-opt", "size=80G", "busybox") + // Ensure this fails because of the defaultBaseFsSize is 10G + out, _, err := dockerCmdWithError("create", "--storage-opt", "size=5G", "busybox") c.Assert(err, check.NotNil, check.Commentf(out)) c.Assert(out, checker.Contains, "Container size cannot be smaller than") } From 0bfc9c8de07cb2ad716d522952b2901080161909 Mon Sep 17 00:00:00 2001 From: mYmNeo Date: Tue, 5 Apr 2016 09:30:05 +0800 Subject: [PATCH 3/3] when container had no layer data, cleanupContainer crashed Signed-off-by: mYmNeo --- daemon/delete.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/daemon/delete.go b/daemon/delete.go index 008eefaa88..3a3895372c 100644 --- a/daemon/delete.go +++ b/daemon/delete.go @@ -123,10 +123,14 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemo return fmt.Errorf("Unable to remove filesystem for %v: %v", container.ID, err) } - metadata, err := daemon.layerStore.ReleaseRWLayer(container.RWLayer) - layer.LogReleaseMetadata(metadata) - if err != nil && err != layer.ErrMountDoesNotExist { - return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", daemon.GraphDriverName(), container.ID, err) + // When container creation fails and `RWLayer` has not been created yet, we + // do not call `ReleaseRWLayer` + if container.RWLayer != nil { + metadata, err := daemon.layerStore.ReleaseRWLayer(container.RWLayer) + layer.LogReleaseMetadata(metadata) + if err != nil && err != layer.ErrMountDoesNotExist { + return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", daemon.GraphDriverName(), container.ID, err) + } } return nil