docker/patch/0175-docker-clean-docker-load-leak-files.patch
jingrui af6293703d docker: sync bugfix
Change-Id: I4dc92059d90415199fcd143d75cc68cfdb67c430
Signed-off-by: jingrui <jingrui@huawei.com>
2021-01-19 14:03:29 +08:00

86 lines
2.8 KiB
Diff

From a74f1c3e4ab7c6f4a043904a8e68edf04864d98a Mon Sep 17 00:00:00 2001
From: jingrui <jingrui@huawei.com>
Date: Wed, 2 Dec 2020 17:20:50 +0800
Subject: [PATCH] docker: clean docker load leak files
Change-Id: I09b66e204f655a9fef660bb85619f5711fb5700b
Signed-off-by: jingrui <jingrui@huawei.com>
---
components/engine/daemon/daemon.go | 39 +++++++++++++++++++
.../daemon/graphdriver/devmapper/deviceset.go | 3 +-
2 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go
index 3ff5691257..1acd355a15 100644
--- a/components/engine/daemon/daemon.go
+++ b/components/engine/daemon/daemon.go
@@ -613,11 +613,50 @@ func (daemon *Daemon) restore() error {
group.Wait()
+ daemon.cleanExit()
logrus.Info("Loading containers: done.")
return nil
}
+func (daemon *Daemon) cleanExit() {
+ mnt := filepath.Join(daemon.root, "devicemapper/mnt")
+ if dir, err := ioutil.ReadDir(mnt); err == nil {
+ for _, f := range dir {
+ fname := filepath.Join(mnt, f.Name())
+ data, err := ioutil.ReadFile(fname)
+ if err != nil {
+ continue
+ }
+ if string(data) == "exit" {
+ logrus.Infof("cleanExit remove mnt %s", fname)
+ os.Remove(fname)
+ }
+ }
+ }
+
+ tmp := filepath.Join(daemon.root, "image/devicemapper/layerdb/tmp")
+ if dir, err := ioutil.ReadDir(tmp); err == nil {
+ for _, f := range dir {
+ if strings.Contains(f.Name(), "write-set-") {
+ fname := filepath.Join(tmp, f.Name())
+ logrus.Infof("cleanExit remove layerdb %s", fname)
+ os.RemoveAll(fname)
+ }
+ }
+ }
+
+ if dir, err := ioutil.ReadDir(os.Getenv("TMPDIR")); err == nil {
+ for _, f := range dir {
+ if strings.Contains(f.Name(), "docker-import-") {
+ fname := filepath.Join(os.Getenv("TMPDIR"), f.Name())
+ logrus.Infof("cleanExit remove tmpdir %s", fname)
+ os.RemoveAll(fname)
+ }
+ }
+ }
+}
+
// RestartSwarmContainers restarts any autostart container which has a
// swarm endpoint.
func (daemon *Daemon) RestartSwarmContainers() {
diff --git a/components/engine/daemon/graphdriver/devmapper/deviceset.go b/components/engine/daemon/graphdriver/devmapper/deviceset.go
index ff90c44ce3..750f2b13f8 100644
--- a/components/engine/daemon/graphdriver/devmapper/deviceset.go
+++ b/components/engine/daemon/graphdriver/devmapper/deviceset.go
@@ -2286,8 +2286,9 @@ func (devices *DeviceSet) unmountAndDeactivateAll(dir string) {
if err := unix.Unmount(fullname, unix.MNT_DETACH); err != nil && err != unix.EINVAL {
logger.Warnf("Shutdown unmounting %s, error: %s", fullname, err)
} else if err == nil {
- logger.Debugf("Remove %s", fullname)
+ logger.Infof("cleanExit prepare %s", fullname)
os.RemoveAll(fullname)
+ ioutil.WriteFile(fullname, []byte("exit"), 0600)
}
if devInfo, err := devices.lookupDevice(name); err != nil {
--
2.17.1