From 34c545824f5d49b771c13cc8e311bb3bec315fc0 Mon Sep 17 00:00:00 2001 From: Edgar Lee Date: Fri, 23 Feb 2024 23:11:48 +0800 Subject: [PATCH] Automatically decompress archives for transfer service import Signed-off-by: Edgar Lee --- core/transfer/archive/importer.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/core/transfer/archive/importer.go b/core/transfer/archive/importer.go index 5b19cfb77..50d303296 100644 --- a/core/transfer/archive/importer.go +++ b/core/transfer/archive/importer.go @@ -28,6 +28,7 @@ import ( "github.com/containerd/containerd/v2/core/images/archive" "github.com/containerd/containerd/v2/core/streaming" tstreaming "github.com/containerd/containerd/v2/core/transfer/streaming" + "github.com/containerd/containerd/v2/pkg/archive/compression" "github.com/containerd/log" ) @@ -64,7 +65,18 @@ func (iis *ImageImportStream) Import(ctx context.Context, store content.Store) ( if iis.forceCompress { opts = append(opts, archive.WithImportCompression()) } - return archive.ImportIndex(ctx, store, iis.stream, opts...) + + r := iis.stream + if iis.mediaType == "" { + d, err := compression.DecompressStream(iis.stream) + if err != nil { + return ocispec.Descriptor{}, err + } + defer d.Close() + r = d + } + + return archive.ImportIndex(ctx, store, r, opts...) } func (iis *ImageImportStream) MarshalAny(ctx context.Context, sm streaming.StreamCreator) (typeurl.Any, error) {