From d64fa3b6b861617e60416bf640a52fc9657826ab Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Fri, 9 Aug 2019 18:47:40 -0700 Subject: [PATCH] Remove extra roundtrip for checking schema1. Signed-off-by: Lantao Liu --- pkg/server/image_pull.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/pkg/server/image_pull.go b/pkg/server/image_pull.go index 4e68ed111..a6fef2b99 100644 --- a/pkg/server/image_pull.go +++ b/pkg/server/image_pull.go @@ -94,17 +94,19 @@ func (c *criService) PullImage(ctx context.Context, r *runtime.PullImageRequest) if ref != imageRef { log.G(ctx).Debugf("PullImage using normalized image ref: %q", ref) } - resolver := docker.NewResolver(docker.ResolverOptions{ - Hosts: c.registryHosts(r.GetAuth()), - }) - _, desc, err := resolver.Resolve(ctx, ref) - if err != nil { - return nil, errors.Wrapf(err, "failed to resolve image %q", ref) - } - // We have to check schema1 here, because after `Pull`, schema1 - // image has already been converted. - isSchema1 := desc.MediaType == containerdimages.MediaTypeDockerSchema1Manifest - + var ( + resolver = docker.NewResolver(docker.ResolverOptions{ + Hosts: c.registryHosts(r.GetAuth()), + }) + isSchema1 bool + imageHandler containerdimages.HandlerFunc = func(_ context.Context, + desc imagespec.Descriptor) ([]imagespec.Descriptor, error) { + if desc.MediaType == containerdimages.MediaTypeDockerSchema1Manifest { + isSchema1 = true + } + return nil, nil + } + ) image, err := c.client.Pull(ctx, ref, containerd.WithSchema1Conversion, containerd.WithResolver(resolver), @@ -112,6 +114,7 @@ func (c *criService) PullImage(ctx context.Context, r *runtime.PullImageRequest) containerd.WithPullUnpack, containerd.WithPullLabel(imageLabelKey, imageLabelValue), containerd.WithMaxConcurrentDownloads(c.config.MaxConcurrentDownloads), + containerd.WithImageHandler(imageHandler), ) if err != nil { return nil, errors.Wrapf(err, "failed to pull and unpack image %q", ref)