From b8d232c6a7241143c73fce489bb596f60cc968ad Mon Sep 17 00:00:00 2001 From: Darren Stahl Date: Mon, 31 Oct 2016 13:17:57 -0700 Subject: [PATCH] Windows: Rename layers before deletion Signed-off-by: Darren Stahl Upstream-commit: be68006d1928b34936050175e67f85b4ee7f67cf Component: engine --- .../engine/daemon/graphdriver/windows/windows.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/components/engine/daemon/graphdriver/windows/windows.go b/components/engine/daemon/graphdriver/windows/windows.go index 75a3d00e3f..29d53dc427 100644 --- a/components/engine/daemon/graphdriver/windows/windows.go +++ b/components/engine/daemon/graphdriver/windows/windows.go @@ -243,8 +243,18 @@ func (d *Driver) Remove(id string) error { if err != nil { return err } - os.RemoveAll(filepath.Join(d.info.HomeDir, "sysfile-backups", rID)) // ok to fail - return hcsshim.DestroyLayer(d.info, rID) + + layerPath := filepath.Join(d.info.HomeDir, rID) + tmpID := fmt.Sprintf("%s-removing", rID) + tmpLayerPath := filepath.Join(d.info.HomeDir, tmpID) + if err := os.Rename(layerPath, tmpLayerPath); err != nil && !os.IsNotExist(err) { + return err + } + if err := hcsshim.DestroyLayer(d.info, tmpID); err != nil { + logrus.Errorf("Failed to DestroyLayer %s: %s", id, err) + } + + return nil } // Get returns the rootfs path for the id. This will mount the dir at its given path.