From b9d271056b3eef2b1f84ccbc1e6dc5c34c16e3a4 Mon Sep 17 00:00:00 2001 From: Yadong Ding Date: Fri, 12 May 2023 11:07:09 +0800 Subject: [PATCH 1/2] fix: filter platform in set metric SourceImageSize When we pull the image, we filte the platform, but the index descriptor will include all platforms. In that case, when we need to calculate the SourceImageSize, we will get error platform manifests. We can't find blobs locally because we do filter in pull. Signed-off-by: Yadong Ding --- pkg/converter/converter.go | 2 +- pkg/converter/metric.go | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/pkg/converter/converter.go b/pkg/converter/converter.go index 48e4c462..8127fd25 100644 --- a/pkg/converter/converter.go +++ b/pkg/converter/converter.go @@ -124,7 +124,7 @@ func (cvt *Converter) Convert(ctx context.Context, source, target string) (*Metr return nil, errors.Wrap(err, "convert image") } metric.ConversionElapsed = time.Since(start) - if err := metric.SetTargetImageSize(ctx, cvt.provider.ContentStore(), desc); err != nil { + if err := metric.SetTargetImageSize(ctx, cvt, desc); err != nil { return nil, errors.Wrap(err, "get target image size") } logger.Infof("converted image %s, elapse %s", target, metric.ConversionElapsed) diff --git a/pkg/converter/metric.go b/pkg/converter/metric.go index da5b9ba9..03461ef8 100644 --- a/pkg/converter/metric.go +++ b/pkg/converter/metric.go @@ -21,14 +21,10 @@ import ( "github.com/containerd/containerd/content" "github.com/containerd/containerd/images" + "github.com/containerd/containerd/platforms" ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) -const ( - MediaTypeDockerSchema2Manifest = "application/vnd.docker.distribution.manifest.v2+json" - MediaTypeDockerSchema2ManifestList = "application/vnd.docker.distribution.manifest.list.v2+json" -) - // Metric collected the metrics of conversion progress type Metric struct { // Total size of the source image with specified platforms in bytes @@ -43,9 +39,9 @@ type Metric struct { TargetPushElapsed time.Duration } -func (metric *Metric) SetTargetImageSize(ctx context.Context, cs content.Store, desc *ocispec.Descriptor) error { +func (metric *Metric) SetTargetImageSize(ctx context.Context, cvt *Converter, desc *ocispec.Descriptor) error { var err error - metric.TargetImageSize, err = metric.imageSize(ctx, cs, desc) + metric.TargetImageSize, err = metric.imageSize(ctx, cvt.provider.ContentStore(), desc, cvt.platformMC) return err } @@ -54,15 +50,17 @@ func (metric *Metric) SetSourceImageSize(ctx context.Context, cvt *Converter, so if err != nil { return err } - metric.SourceImageSize, err = metric.imageSize(ctx, cvt.provider.ContentStore(), image) - return err + if metric.SourceImageSize, err = metric.imageSize(ctx, cvt.provider.ContentStore(), image, cvt.platformMC); err != nil { + return err + } + return nil } -func (metric *Metric) imageSize(ctx context.Context, cs content.Store, image *ocispec.Descriptor) (int64, error) { +func (metric *Metric) imageSize(ctx context.Context, cs content.Store, image *ocispec.Descriptor, platformMC platforms.MatchComparer) (int64, error) { var imageSize int64 switch image.MediaType { - case ocispec.MediaTypeImageIndex, MediaTypeDockerSchema2ManifestList: - manifests, err := images.ChildrenHandler(cs)(ctx, *image) + case ocispec.MediaTypeImageIndex, images.MediaTypeDockerSchema2ManifestList: + manifests, err := images.FilterPlatforms(images.ChildrenHandler(cs), platformMC)(ctx, *image) if err != nil { return imageSize, err } @@ -75,7 +73,7 @@ func (metric *Metric) imageSize(ctx context.Context, cs content.Store, image *oc imageSize += desc.Size } } - case ocispec.MediaTypeImageManifest, MediaTypeDockerSchema2Manifest: + case ocispec.MediaTypeImageManifest, images.MediaTypeDockerSchema2Manifest: children, err := images.ChildrenHandler(cs)(ctx, *image) if err != nil { return imageSize, err From 8671502a14166b134b2aa11358e814143a25f64b Mon Sep 17 00:00:00 2001 From: Yadong Ding Date: Fri, 12 May 2023 11:29:54 +0800 Subject: [PATCH 2/2] fix: default nydus fs-version should be v6 Signed-off-by: Yadong Ding --- pkg/driver/nydus/nydus.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/driver/nydus/nydus.go b/pkg/driver/nydus/nydus.go index dd8cd97e..31f2b94b 100644 --- a/pkg/driver/nydus/nydus.go +++ b/pkg/driver/nydus/nydus.go @@ -118,7 +118,7 @@ func New(cfg map[string]string, platformMC platforms.MatchComparer) (*Driver, er // For compatibility of older configuration. fsVersion = cfg["rafs_version"] if fsVersion == "" { - fsVersion = "5" + fsVersion = "6" } } compressor := cfg["compressor"]