daemon/c8d: Use i.images and i.content
Use `image.Store` and `content.Store` stored in the ImageService struct instead of fetching it every time from containerd client. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
608d77d740
commit
74e2f23e1a
11 changed files with 30 additions and 34 deletions
|
@ -178,7 +178,7 @@ func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, opt
|
|||
platform = platforms.Only(*options.Platform)
|
||||
}
|
||||
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
|
||||
img, err := i.resolveImage(ctx, refOrID)
|
||||
if err != nil {
|
||||
|
@ -237,7 +237,7 @@ func (i *ImageService) GetImageManifest(ctx context.Context, refOrID string, opt
|
|||
func (i *ImageService) size(ctx context.Context, desc ocispec.Descriptor, platform platforms.MatchComparer) (int64, error) {
|
||||
var size int64
|
||||
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
handler := containerdimages.LimitManifests(containerdimages.ChildrenHandler(cs), platform, 1)
|
||||
|
||||
var wh containerdimages.HandlerFunc = func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
|
||||
|
@ -360,7 +360,7 @@ func (i *ImageService) resolveImage(ctx context.Context, refOrID string) (contai
|
|||
// pointing to the same repository as the given reference.
|
||||
func (i *ImageService) getAllImagesWithRepository(ctx context.Context, ref reference.Named) ([]containerdimages.Image, error) {
|
||||
nameFilter := "^" + regexp.QuoteMeta(ref.Name()) + ":" + reference.TagRegexp.String() + "$"
|
||||
return i.client.ImageService().List(ctx, "name~="+strconv.Quote(nameFilter))
|
||||
return i.images.List(ctx, "name~="+strconv.Quote(nameFilter))
|
||||
}
|
||||
|
||||
func imageFamiliarName(img containerdimages.Image) string {
|
||||
|
@ -378,7 +378,7 @@ func imageFamiliarName(img containerdimages.Image) string {
|
|||
// targeting the specified digest.
|
||||
// If images have different values, an errdefs.Conflict error will be returned.
|
||||
func (i *ImageService) getImageLabelByDigest(ctx context.Context, target digest.Digest, labelKey string) (string, error) {
|
||||
imgs, err := i.client.ImageService().List(ctx, "target.digest=="+target.String()+",labels."+labelKey)
|
||||
imgs, err := i.images.List(ctx, "target.digest=="+target.String()+",labels."+labelKey)
|
||||
if err != nil {
|
||||
return "", errdefs.System(err)
|
||||
}
|
||||
|
|
|
@ -202,12 +202,12 @@ func newROLayerForImage(ctx context.Context, imgDesc *ocispec.Descriptor, i *Ima
|
|||
platMatcher = platforms.Only(*platform)
|
||||
}
|
||||
|
||||
confDesc, err := containerdimages.Config(ctx, i.client.ContentStore(), *imgDesc, platMatcher)
|
||||
confDesc, err := containerdimages.Config(ctx, i.content, *imgDesc, platMatcher)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
diffIDs, err := containerdimages.RootFS(ctx, i.client.ContentStore(), confDesc)
|
||||
diffIDs, err := containerdimages.RootFS(ctx, i.content, confDesc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -446,7 +446,7 @@ func (i *ImageService) CreateImage(ctx context.Context, config []byte, parent st
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
parentImageManifest, err := containerdimages.Manifest(ctx, i.client.ContentStore(), parentDesc, platforms.Default())
|
||||
parentImageManifest, err := containerdimages.Manifest(ctx, i.content, parentDesc, platforms.Default())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -455,7 +455,7 @@ func (i *ImageService) CreateImage(ctx context.Context, config []byte, parent st
|
|||
parentDigest = parentDesc.Digest
|
||||
}
|
||||
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
|
||||
ra, err := cs.ReaderAt(ctx, ocispec.Descriptor{Digest: layerDigest})
|
||||
if err != nil {
|
||||
|
@ -504,7 +504,7 @@ func (i *ImageService) createImageOCI(ctx context.Context, imgToCreate imagespec
|
|||
}
|
||||
}()
|
||||
|
||||
manifestDesc, ccDesc, err := writeContentsForImage(ctx, i.snapshotter, i.client.ContentStore(), imgToCreate, layers, containerConfig)
|
||||
manifestDesc, ccDesc, err := writeContentsForImage(ctx, i.snapshotter, i.content, imgToCreate, layers, containerConfig)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -523,13 +523,13 @@ func (i *ImageService) createImageOCI(ctx context.Context, imgToCreate imagespec
|
|||
img.Labels[imageLabelClassicBuilderFromScratch] = "1"
|
||||
}
|
||||
|
||||
createdImage, err := i.client.ImageService().Update(ctx, img)
|
||||
createdImage, err := i.images.Update(ctx, img)
|
||||
if err != nil {
|
||||
if !cerrdefs.IsNotFound(err) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if createdImage, err = i.client.ImageService().Create(ctx, img); err != nil {
|
||||
if createdImage, err = i.images.Create(ctx, img); err != nil {
|
||||
return "", fmt.Errorf("failed to create new image: %w", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ with adaptations to match the Moby data model and services.
|
|||
// CommitImage creates a new image from a commit config.
|
||||
func (i *ImageService) CommitImage(ctx context.Context, cc backend.CommitConfig) (image.ID, error) {
|
||||
container := i.containers.Get(cc.ContainerID)
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
|
||||
var parentManifest ocispec.Manifest
|
||||
var parentImage imagespec.DockerOCIImage
|
||||
|
|
|
@ -375,7 +375,7 @@ func (i *ImageService) imageDeleteHelper(ctx context.Context, img images.Image,
|
|||
CreatedAt: time.Now(),
|
||||
Labels: img.Labels,
|
||||
}
|
||||
if _, err = i.client.ImageService().Create(ctx, img); err != nil && !cerrdefs.IsAlreadyExists(err) {
|
||||
if _, err = i.images.Create(ctx, img); err != nil && !cerrdefs.IsAlreadyExists(err) {
|
||||
return fmt.Errorf("failed to create dangling image: %w", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,13 +84,12 @@ func (i *ImageService) ImageHistory(ctx context.Context, name string) ([]*imaget
|
|||
return imgs
|
||||
}
|
||||
|
||||
is := i.client.ImageService()
|
||||
currentImg := img
|
||||
for _, h := range history {
|
||||
dgst := currentImg.Target.Digest.String()
|
||||
h.ID = dgst
|
||||
|
||||
imgs, err := is.List(ctx, "target.digest=="+dgst)
|
||||
imgs, err := i.images.List(ctx, "target.digest=="+dgst)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -157,5 +156,5 @@ func (i *ImageService) getParentsByBuilderLabel(ctx context.Context, img contain
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
return i.client.ImageService().List(ctx, "target.digest=="+dgst.String())
|
||||
return i.images.List(ctx, "target.digest=="+dgst.String())
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ func (i *ImageService) ImportImage(ctx context.Context, ref reference.Named, pla
|
|||
return "", errdefs.InvalidParameter(err)
|
||||
}
|
||||
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
|
||||
compressedDigest, uncompressedDigest, mt, err := saveArchive(ctx, cs, layerReader)
|
||||
if err != nil {
|
||||
|
@ -299,11 +299,9 @@ func writeBlobAndReturnDigest(ctx context.Context, cs content.Store, mt string,
|
|||
|
||||
// saveImage creates an image in the ImageService or updates it if it exists.
|
||||
func (i *ImageService) saveImage(ctx context.Context, img images.Image) error {
|
||||
is := i.client.ImageService()
|
||||
|
||||
if _, err := is.Update(ctx, img); err != nil {
|
||||
if _, err := i.images.Update(ctx, img); err != nil {
|
||||
if cerrdefs.IsNotFound(err) {
|
||||
if _, err := is.Create(ctx, img); err != nil {
|
||||
if _, err := i.images.Create(ctx, img); err != nil {
|
||||
return errdefs.Unknown(err)
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -72,7 +72,7 @@ func (i *ImageService) Images(ctx context.Context, opts imagetypes.ListOptions)
|
|||
return nil, err
|
||||
}
|
||||
|
||||
imgs, err := i.client.ImageService().List(ctx)
|
||||
imgs, err := i.images.List(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ func (i *ImageService) Images(ctx context.Context, opts imagetypes.ListOptions)
|
|||
layers = make(map[digest.Digest]int)
|
||||
}
|
||||
|
||||
contentStore := i.client.ContentStore()
|
||||
contentStore := i.content
|
||||
uniqueImages := map[digest.Digest]images.Image{}
|
||||
tagsByDigest := map[digest.Digest][]string{}
|
||||
intermediateImages := map[digest.Digest]struct{}{}
|
||||
|
@ -426,7 +426,7 @@ func (i *ImageService) setupFilters(ctx context.Context, imageFilters filters.Ar
|
|||
return nil, err
|
||||
}
|
||||
|
||||
labelFn, err := setupLabelFilter(i.client.ContentStore(), imageFilters)
|
||||
labelFn, err := setupLabelFilter(i.content, imageFilters)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ func (i *ImageService) pullTag(ctx context.Context, ref reference.Named, platfor
|
|||
})
|
||||
opts = append(opts, containerd.WithImageHandler(h))
|
||||
|
||||
pp := pullProgress{store: i.client.ContentStore(), showExists: true}
|
||||
pp := pullProgress{store: i.content, showExists: true}
|
||||
finishProgress := jobs.showProgress(ctx, out, pp)
|
||||
|
||||
var outNewImg *containerd.Image
|
||||
|
@ -140,7 +140,7 @@ func (i *ImageService) pullTag(ctx context.Context, ref reference.Named, platfor
|
|||
sentPullingFrom = true
|
||||
}
|
||||
|
||||
available, _, _, missing, err := images.Check(ctx, i.client.ContentStore(), desc, p)
|
||||
available, _, _, missing, err := images.Check(ctx, i.content, desc, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ func (i *ImageService) pullTag(ctx context.Context, ref reference.Named, platfor
|
|||
logger.Info("image pulled")
|
||||
|
||||
// The pull succeeded, so try to remove any dangling image we have for this target
|
||||
err = i.client.ImageService().Delete(compatcontext.WithoutCancel(ctx), danglingImageName(img.Target().Digest))
|
||||
err = i.images.Delete(compatcontext.WithoutCancel(ctx), danglingImageName(img.Target().Digest))
|
||||
if err != nil && !cerrdefs.IsNotFound(err) {
|
||||
// Image pull succeeded, but cleaning up the dangling image failed. Ignore the
|
||||
// error to not mark the pull as failed.
|
||||
|
|
|
@ -91,7 +91,7 @@ func (i *ImageService) pushRef(ctx context.Context, targetRef reference.Named, m
|
|||
}
|
||||
}()
|
||||
|
||||
img, err := i.client.ImageService().Get(ctx, targetRef.String())
|
||||
img, err := i.images.Get(ctx, targetRef.String())
|
||||
if err != nil {
|
||||
if cerrdefs.IsNotFound(err) {
|
||||
return errdefs.NotFound(fmt.Errorf("tag does not exist: %s", reference.FamiliarString(targetRef)))
|
||||
|
@ -100,7 +100,7 @@ func (i *ImageService) pushRef(ctx context.Context, targetRef reference.Named, m
|
|||
}
|
||||
|
||||
target := img.Target
|
||||
store := i.client.ContentStore()
|
||||
store := i.content
|
||||
|
||||
resolver, tracker := i.newResolverFromAuthConfig(ctx, authConfig, targetRef)
|
||||
pp := pushProgress{Tracker: tracker}
|
||||
|
|
|
@ -26,7 +26,7 @@ func (i *ImageService) PrepareSnapshot(ctx context.Context, id string, parentIma
|
|||
return err
|
||||
}
|
||||
|
||||
cs := i.client.ContentStore()
|
||||
cs := i.content
|
||||
|
||||
matcher := matchAllWithPreference(platforms.Default())
|
||||
if platform != nil {
|
||||
|
|
|
@ -28,8 +28,7 @@ func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag re
|
|||
Labels: targetImage.Labels,
|
||||
}
|
||||
|
||||
is := i.client.ImageService()
|
||||
_, err = is.Create(ctx, newImg)
|
||||
_, err = i.images.Create(ctx, newImg)
|
||||
if err != nil {
|
||||
if !cerrdefs.IsAlreadyExists(err) {
|
||||
return errdefs.System(errors.Wrapf(err, "failed to create image with name %s and target %s", newImg.Name, newImg.Target.Digest.String()))
|
||||
|
@ -54,7 +53,7 @@ func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag re
|
|||
return errors.Wrapf(err, "failed to delete previous image %s", replacedImg.Name)
|
||||
}
|
||||
|
||||
if _, err = is.Create(compatcontext.WithoutCancel(ctx), newImg); err != nil {
|
||||
if _, err = i.images.Create(compatcontext.WithoutCancel(ctx), newImg); err != nil {
|
||||
return errdefs.System(errors.Wrapf(err, "failed to create an image %s with target %s after deleting the existing one",
|
||||
newImg.Name, imageID.String()))
|
||||
}
|
||||
|
@ -69,7 +68,7 @@ func (i *ImageService) TagImage(ctx context.Context, imageID image.ID, newTag re
|
|||
defer i.LogImageEvent(imageID.String(), reference.FamiliarString(newTag), events.ActionTag)
|
||||
|
||||
// Delete the source dangling image, as it's no longer dangling.
|
||||
if err := is.Delete(compatcontext.WithoutCancel(ctx), danglingImageName(targetImage.Target.Digest)); err != nil {
|
||||
if err := i.images.Delete(compatcontext.WithoutCancel(ctx), danglingImageName(targetImage.Target.Digest)); err != nil {
|
||||
logger.WithError(err).Warn("unexpected error when deleting dangling image")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue