فهرست منبع

Make sure that layers are removed from layerdb after succefull layer removal

Signed-off-by: Olli Janatuinen <olli.janatuinen@gmail.com>
Olli Janatuinen 5 سال پیش
والد
کامیت
446fe7f263
3فایلهای تغییر یافته به همراه9 افزوده شده و 3 حذف شده
  1. 6 0
      integration/image/remove_unix_test.go
  2. 1 1
      layer/filestore.go
  3. 2 2
      layer/layer_store.go

+ 6 - 0
integration/image/remove_unix_test.go

@@ -110,4 +110,10 @@ func TestRemoveImageGarbageCollector(t *testing.T) {
 	i.Cleanup()
 	_, err = os.Stat(data["UpperDir"])
 	assert.Assert(t, os.IsNotExist(err))
+
+	// Make sure that removal pending layers does not exist on layerdb either
+	layerdbItems, _ := ioutil.ReadDir(filepath.Join(d.RootDir(), "/image/overlay2/layerdb/sha256"))
+	for _, folder := range layerdbItems {
+		assert.Equal(t, false, strings.HasSuffix(folder.Name(), "-removing"))
+	}
 }

+ 1 - 1
layer/filestore.go

@@ -403,7 +403,7 @@ func (fms *fileMetadataStore) Remove(layer ChainID, cache string) error {
 		return err
 	}
 	for _, f := range files {
-		if !strings.HasSuffix(f.Name(), "-removing") || !strings.HasPrefix(f.Name(), dgst.String()) {
+		if !strings.HasSuffix(f.Name(), "-removing") || !strings.HasPrefix(f.Name(), dgst.Encoded()) {
 			continue
 		}
 

+ 2 - 2
layer/layer_store.go

@@ -419,11 +419,11 @@ func (ls *layerStore) Map() map[ChainID]Layer {
 func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
 	// Rename layer digest folder first so we detect orphan layer(s)
 	// if ls.driver.Remove fails
-	dir := ls.store.getLayerDirectory(layer.chainID)
+	var dir string
 	for {
 		dgst := digest.Digest(layer.chainID)
 		tmpID := fmt.Sprintf("%s-%s-removing", dgst.Hex(), stringid.GenerateRandomID())
-		dir := filepath.Join(ls.store.root, string(dgst.Algorithm()), tmpID)
+		dir = filepath.Join(ls.store.root, string(dgst.Algorithm()), tmpID)
 		err := os.Rename(ls.store.getLayerDirectory(layer.chainID), dir)
 		if os.IsExist(err) {
 			continue