From c07e81dc3859bfd8ee13c870dd31f89aa7a82237 Mon Sep 17 00:00:00 2001 From: zvier Date: Sun, 12 Jul 2020 09:02:30 +0800 Subject: [PATCH] layerStore: clean residual resources in layerStore when remove an image Signed-off-by: zvier (cherry picked from commit 5dcc8ed528483545285a978a88a69d4d46e65c93) Signed-off-by: Francesco Giudici --- layers.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/layers.go b/layers.go index 6c8f59b8b2..319e2ce310 100644 --- a/layers.go +++ b/layers.go @@ -832,6 +832,27 @@ func (r *layerStore) tspath(id string) string { return filepath.Join(r.layerdir, id+tarSplitSuffix) } +func (r *layerStore) deleteInDigestMap(id string) { + for digest, layers := range r.bycompressedsum { + for i, layerID := range layers { + if layerID == id { + layers = append(layers[:i], layers[i+1:]...) + r.bycompressedsum[digest] = layers + break + } + } + } + for digest, layers := range r.byuncompressedsum { + for i, layerID := range layers { + if layerID == id { + layers = append(layers[:i], layers[i+1:]...) + r.byuncompressedsum[digest] = layers + break + } + } + } +} + func (r *layerStore) Delete(id string) error { if !r.IsReadWrite() { return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to delete layers at %q", r.layerspath()) @@ -857,6 +878,7 @@ func (r *layerStore) Delete(id string) error { if layer.MountPoint != "" { delete(r.bymount, layer.MountPoint) } + r.deleteInDigestMap(id) toDeleteIndex := -1 for i, candidate := range r.layers { if candidate.ID == id {