isula-build/patch/0127-Fix-the-problem-that-the-var-lib-isula-build-storage.patch

87 lines
2.1 KiB
Diff
Raw Normal View History

From 01f6ca6d4be513a17fc454b6c948aa992e2c47d7 Mon Sep 17 00:00:00 2001
From: daisicheng <daisicheng@huawei.com>
Date: Tue, 1 Nov 2022 11:04:22 +0800
Subject: [PATCH] Fix the problem that the /var/lib/isula-build/storage/overlay
is still existed when killing daemon and an error when executing "isula-build
rm -a" at the first time.
---
daemon/remove.go | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/daemon/remove.go b/daemon/remove.go
index e0a9eed..2933dc3 100644
--- a/daemon/remove.go
+++ b/daemon/remove.go
@@ -15,6 +15,9 @@ package daemon
import (
"fmt"
+ "io/ioutil"
+ "os"
+ "path/filepath"
"github.com/containers/storage"
"github.com/pkg/errors"
@@ -24,6 +27,7 @@ import (
pb "isula.org/isula-build/api/services"
"isula.org/isula-build/image"
"isula.org/isula-build/store"
+ "isula.org/isula-build/util"
)
// Remove to remove store images
@@ -115,6 +119,13 @@ func (b *Backend) Remove(req *pb.RemoveRequest, stream pb.Control_RemoveServer)
if rmFailed {
return errors.New("remove one or more images failed")
}
+
+ if req.All {
+ if err := resetDataRoot(s.GraphRoot()); err != nil {
+ return errors.Wrap(err, "reset data root failed")
+ }
+ }
+
return nil
}
@@ -154,3 +165,35 @@ func getImageIDs(s *store.Store, prune bool) ([]string, error) {
return imageIDs, nil
}
+
+func resetDataRoot(dataRoot string) error {
+ emptyOverlayStructure := map[string]string{
+ "overlay": "l",
+ "overlay-containers": "containers.lock",
+ "overlay-images": "images.lock",
+ }
+
+ if exist, err := util.IsExist(filepath.Join(dataRoot, "overlay-layers")); err != nil {
+ return err
+ } else if exist {
+ emptyOverlayStructure["overlay-layers"] = "layers.lock"
+ }
+ for upDir, keep := range emptyOverlayStructure {
+ upDirAbs := filepath.Join(dataRoot, upDir)
+ files, err := ioutil.ReadDir(upDirAbs)
+ if err != nil {
+ return nil
+ }
+
+ for _, file := range files {
+ if file.Name() == keep {
+ continue
+ }
+ if err := os.RemoveAll(filepath.Join(upDirAbs, file.Name())); err != nil {
+ return nil
+ }
+ }
+ }
+
+ return nil
+}
--
2.33.0