From 9910b9a7f02f6991d55abcc4ea57ec78d3b3675f Mon Sep 17 00:00:00 2001 From: "John Howard (VM)" Date: Fri, 17 Mar 2017 14:59:48 -0700 Subject: [PATCH] Windows: graph cleanup '-removing' Signed-off-by: John Howard (VM) --- daemon/graphdriver/windows/windows.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/daemon/graphdriver/windows/windows.go b/daemon/graphdriver/windows/windows.go index 35b40e398c..31c395378b 100644 --- a/daemon/graphdriver/windows/windows.go +++ b/daemon/graphdriver/windows/windows.go @@ -412,7 +412,29 @@ func (d *Driver) Put(id string) error { } // Cleanup ensures the information the driver stores is properly removed. +// We use this opportunity to cleanup any -removing folders which may be +// still left if the daemon was killed while it was removing a layer. func (d *Driver) Cleanup() error { + + items, err := ioutil.ReadDir(d.info.HomeDir) + if err != nil { + return err + } + + // Note we don't return an error below - it's possible the files + // are locked. However, next time around after the daemon exits, + // we likely will be able to to cleanup successfully. Instead we log + // warnings if there are errors. + for _, item := range items { + if item.IsDir() && strings.HasSuffix(item.Name(), "-removing") { + if err := hcsshim.DestroyLayer(d.info, item.Name()); err != nil { + logrus.Warnf("Failed to cleanup %s: %s", item.Name(), err) + } else { + logrus.Infof("Cleaned up %s", item.Name()) + } + } + } + return nil }