Skip to content

Commit

Permalink
Merge pull request #1209 from nalind/always-delete-mapped-layers
Browse files Browse the repository at this point in the history
DeleteImage(): always delete mapped top layers
  • Loading branch information
rhatdan committed Apr 14, 2022
2 parents 6a5a0e5 + ff62c5b commit eea4e0f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
10 changes: 4 additions & 6 deletions store.go
Expand Up @@ -2452,6 +2452,10 @@ func (s *store) DeleteImage(id string, commit bool) (layers []string, err error)
}
layer := image.TopLayer
layersToRemoveMap := make(map[string]struct{})
layersToRemove = append(layersToRemove, image.MappedTopLayers...)
for _, mappedTopLayer := range image.MappedTopLayers {
layersToRemoveMap[mappedTopLayer] = struct{}{}
}
for layer != "" {
if rcstore.Exists(layer) {
break
Expand Down Expand Up @@ -2483,12 +2487,6 @@ func (s *store) DeleteImage(id string, commit bool) (layers []string, err error)
if hasChildrenNotBeingRemoved() {
break
}
if layer == image.TopLayer {
layersToRemove = append(layersToRemove, image.MappedTopLayers...)
for _, mappedTopLayer := range image.MappedTopLayers {
layersToRemoveMap[mappedTopLayer] = struct{}{}
}
}
layersToRemove = append(layersToRemove, layer)
layersToRemoveMap[layer] = struct{}{}
layer = parent
Expand Down
18 changes: 17 additions & 1 deletion tests/idmaps.bats
Expand Up @@ -700,11 +700,27 @@ load helpers
test $actual = $expected
done

# Remove the containers and image and check that all of the layers we used got removed.
# Create a new layer based on the image.
run storage --debug=false create-layer --hostuidmap --hostgidmap $lowerlayer
echo "$output"
[ "$status" -eq 0 ]
[ "$output" != "" ]
upperlayer="$output"
run storage --debug=false applydiff -f "$TESTDIR"/layer.empty $upperlayer
# Create an image record for the new layer.
run storage --debug=false create-image $upperlayer
echo "$output"
[ "$status" -eq 0 ]
[ "$output" != "" ]
upperimage="$output"
echo upperimage:$upperimage

# Remove the containers and images and check that all of the layers we used got removed.
for container in "${containers[@]}" ; do
run storage --debug=false delete-container $container
done
run storage --debug=false delete-image $image
run storage --debug=false delete-image $upperimage
run storage --debug=false layers
echo "$output"
[ "$status" -eq 0 ]
Expand Down

0 comments on commit eea4e0f

Please sign in to comment.