Skip to content

Commit 87c87bc

Browse files
committed
Update cleanup logic to use resolve all images
Ensure that when removing an image, an image is checked consistently against the images with the same target digest. Add unit testing around delete. Signed-off-by: Derek McGowan <[email protected]>
1 parent 529d19b commit 87c87bc

10 files changed

Lines changed: 444 additions & 141 deletions

File tree

daemon/containerd/handlers.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import (
1212
// walkPresentChildren is a simple wrapper for containerdimages.Walk with presentChildrenHandler.
1313
// This is only a convenient helper to reduce boilerplate.
1414
func (i *ImageService) walkPresentChildren(ctx context.Context, target ocispec.Descriptor, f func(context.Context, ocispec.Descriptor) error) error {
15-
store := i.client.ContentStore()
16-
return containerdimages.Walk(ctx, presentChildrenHandler(store, containerdimages.HandlerFunc(
15+
return containerdimages.Walk(ctx, presentChildrenHandler(i.content, containerdimages.HandlerFunc(
1716
func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
1817
return nil, f(ctx, desc)
1918
})), target)

daemon/containerd/image.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
4343
platform = cplatforms.OnlyStrict(*options.Platform)
4444
}
4545

46-
cs := i.client.ContentStore()
47-
4846
var presentImages []imagespec.DockerOCIImage
4947
err = i.walkImageManifests(ctx, desc, func(img *ImageManifest) error {
5048
conf, err := img.Config(ctx)
@@ -59,7 +57,7 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
5957
}
6058

6159
var ociimage imagespec.DockerOCIImage
62-
if err := readConfig(ctx, cs, conf, &ociimage); err != nil {
60+
if err := readConfig(ctx, i.content, conf, &ociimage); err != nil {
6361
if cerrdefs.IsNotFound(err) {
6462
log.G(ctx).WithFields(log.Fields{
6563
"manifestDescriptor": img.Target(),
@@ -101,7 +99,7 @@ func (i *ImageService) GetImage(ctx context.Context, refOrID string, options ima
10199
return nil, err
102100
}
103101

104-
tagged, err := i.client.ImageService().List(ctx, "target.digest=="+desc.Target.Digest.String())
102+
tagged, err := i.images.List(ctx, "target.digest=="+desc.Target.Digest.String())
105103
if err != nil {
106104
return nil, err
107105
}
@@ -266,11 +264,9 @@ func (i *ImageService) resolveImage(ctx context.Context, refOrID string) (contai
266264
return containerdimages.Image{}, errdefs.InvalidParameter(err)
267265
}
268266

269-
is := i.client.ImageService()
270-
271267
digested, ok := parsed.(reference.Digested)
272268
if ok {
273-
imgs, err := is.List(ctx, "target.digest=="+digested.Digest().String())
269+
imgs, err := i.images.List(ctx, "target.digest=="+digested.Digest().String())
274270
if err != nil {
275271
return containerdimages.Image{}, errors.Wrap(err, "failed to lookup digest")
276272
}
@@ -300,7 +296,7 @@ func (i *ImageService) resolveImage(ctx context.Context, refOrID string) (contai
300296
}
301297

302298
ref := reference.TagNameOnly(parsed.(reference.Named)).String()
303-
img, err := is.Get(ctx, ref)
299+
img, err := i.images.Get(ctx, ref)
304300
if err == nil {
305301
return img, nil
306302
} else {
@@ -317,7 +313,7 @@ func (i *ImageService) resolveImage(ctx context.Context, refOrID string) (contai
317313
fmt.Sprintf("name==%q", ref), // Or it could just look like one.
318314
"target.digest~=" + strconv.Quote(fmt.Sprintf(`^sha256:%s[0-9a-fA-F]{%d}$`, regexp.QuoteMeta(idWithoutAlgo), 64-len(idWithoutAlgo))),
319315
}
320-
imgs, err := is.List(ctx, filters...)
316+
imgs, err := i.images.List(ctx, filters...)
321317
if err != nil {
322318
return containerdimages.Image{}, err
323319
}

daemon/containerd/image_children.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717

1818
// Children returns a slice of image IDs that are children of the `id` image
1919
func (i *ImageService) Children(ctx context.Context, id image.ID) ([]image.ID, error) {
20-
imgs, err := i.client.ImageService().List(ctx, "labels."+imageLabelClassicBuilderParent+"=="+string(id))
20+
imgs, err := i.images.List(ctx, "labels."+imageLabelClassicBuilderParent+"=="+string(id))
2121
if err != nil {
2222
return []image.ID{}, errdefs.System(errors.Wrap(err, "failed to list all images"))
2323
}
@@ -88,16 +88,14 @@ func (i *ImageService) parents(ctx context.Context, id image.ID) ([]imageWithRoo
8888
return nil, errors.Wrap(err, "failed to get child image")
8989
}
9090

91-
cs := i.client.ContentStore()
92-
93-
allPlatforms, err := containerdimages.Platforms(ctx, cs, target)
91+
allPlatforms, err := containerdimages.Platforms(ctx, i.content, target)
9492
if err != nil {
9593
return nil, errdefs.System(errors.Wrap(err, "failed to list platforms supported by image"))
9694
}
9795

9896
var childRootFS []ocispec.RootFS
9997
for _, platform := range allPlatforms {
100-
rootfs, err := platformRootfs(ctx, cs, target, platform)
98+
rootfs, err := platformRootfs(ctx, i.content, target, platform)
10199
if err != nil {
102100
if cerrdefs.IsNotFound(err) {
103101
continue
@@ -108,7 +106,7 @@ func (i *ImageService) parents(ctx context.Context, id image.ID) ([]imageWithRoo
108106
childRootFS = append(childRootFS, rootfs)
109107
}
110108

111-
imgs, err := i.client.ImageService().List(ctx)
109+
imgs, err := i.images.List(ctx)
112110
if err != nil {
113111
return nil, errdefs.System(errors.Wrap(err, "failed to list all images"))
114112
}
@@ -117,7 +115,7 @@ func (i *ImageService) parents(ctx context.Context, id image.ID) ([]imageWithRoo
117115
for _, img := range imgs {
118116
nextImage:
119117
for _, platform := range allPlatforms {
120-
rootfs, err := platformRootfs(ctx, cs, img.Target, platform)
118+
rootfs, err := platformRootfs(ctx, i.content, img.Target, platform)
121119
if err != nil {
122120
if cerrdefs.IsNotFound(err) {
123121
continue
@@ -158,7 +156,7 @@ func (i *ImageService) getParentsByBuilderLabel(ctx context.Context, img contain
158156
return nil, nil
159157
}
160158

161-
return i.client.ImageService().List(ctx, "target.digest=="+dgst.String())
159+
return i.images.List(ctx, "target.digest=="+dgst.String())
162160
}
163161

164162
type imageWithRootfs struct {

0 commit comments

Comments
 (0)