bugfix: unpack should always set the snapshot gc label
There are two images, A and B. A is based on B. If user pulls A first, then user pulls B. containerd already has the unpacked snapshots in the backend. During unpacking B, the client doesn't set gc snapshot reference label to the config descriptor. That is the problem. The gc module cannot reach the snapshot from the config descriptor. If user removes the image B, the snapshot will be deleted by gc module. That is why we should always set the snapshot gc label to config descriptor. Signed-off-by: Wei Fu <fhfuwei@163.com>
This commit is contained in:
parent
4ccff37c7e
commit
2d96aad771
8
image.go
8
image.go
@ -170,7 +170,6 @@ func (i *image) Unpack(ctx context.Context, snapshotterName string) error {
|
||||
chain = append(chain, layer.Diff.Digest)
|
||||
}
|
||||
|
||||
if unpacked {
|
||||
desc, err := i.i.Config(ctx, cs, i.platform)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -184,12 +183,9 @@ func (i *image) Unpack(ctx context.Context, snapshotterName string) error {
|
||||
fmt.Sprintf("containerd.io/gc.ref.snapshot.%s", snapshotterName): rootfs,
|
||||
},
|
||||
}
|
||||
if _, err := cs.Update(ctx, cinfo, fmt.Sprintf("labels.containerd.io/gc.ref.snapshot.%s", snapshotterName)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
_, err = cs.Update(ctx, cinfo, fmt.Sprintf("labels.containerd.io/gc.ref.snapshot.%s", snapshotterName))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *image) getLayers(ctx context.Context, platform platforms.MatchComparer) ([]rootfs.Layer, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user