Merge pull request #197 from Random-Liu/not-remove-out-dated-tag
Do not remove out dated image tag.
This commit is contained in:
commit
5057c2d4fb
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/containerd/errdefs"
|
||||||
|
"github.com/golang/glog"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
|
"k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
|
||||||
)
|
)
|
||||||
@ -40,12 +41,31 @@ func (c *criContainerdService) RemoveImage(ctx context.Context, r *runtime.Remov
|
|||||||
return &runtime.RemoveImageResponse{}, nil
|
return &runtime.RemoveImageResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Exclude out dated image tag.
|
||||||
|
for i, tag := range image.RepoTags {
|
||||||
|
cImage, err := c.client.GetImage(ctx, tag)
|
||||||
|
if err != nil {
|
||||||
|
if errdefs.IsNotFound(err) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("failed to get image %q: %v", tag, err)
|
||||||
|
}
|
||||||
|
desc, err := cImage.Config(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get image %q config descriptor: %v", tag, err)
|
||||||
|
}
|
||||||
|
cID := desc.Digest.String()
|
||||||
|
if cID == image.ID {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
glog.V(4).Infof("Image tag %q for %q is out dated, it's currently used by %q", tag, image.ID, cID)
|
||||||
|
image.RepoTags = append(image.RepoTags[:i], image.RepoTags[i+1:]...)
|
||||||
|
}
|
||||||
|
|
||||||
// Include all image references, including RepoTag, RepoDigest and id.
|
// Include all image references, including RepoTag, RepoDigest and id.
|
||||||
for _, ref := range append(append(image.RepoTags, image.RepoDigests...), image.ID) {
|
for _, ref := range append(append(image.RepoTags, image.RepoDigests...), image.ID) {
|
||||||
// TODO(random-liu): Containerd should schedule a garbage collection immediately,
|
// TODO(random-liu): Containerd should schedule a garbage collection immediately,
|
||||||
// and we may want to wait for the garbage collection to be over here.
|
// and we may want to wait for the garbage collection to be over here.
|
||||||
// TODO(random-liu): Should check whether descriptor is as expected before delete,
|
|
||||||
// so as to avoid deleting new reference because of staled reference.
|
|
||||||
err = c.imageStoreService.Delete(ctx, ref)
|
err = c.imageStoreService.Delete(ctx, ref)
|
||||||
if err == nil || errdefs.IsNotFound(err) {
|
if err == nil || errdefs.IsNotFound(err) {
|
||||||
continue
|
continue
|
||||||
|
Loading…
Reference in New Issue
Block a user