Skip to content

Commit 79ccf90

Browse files
committed
fix: address review commentsf from PR #677
Signed-off-by: jxr <[email protected]>
1 parent c540cdc commit 79ccf90

File tree

10 files changed

+337
-853
lines changed

10 files changed

+337
-853
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ require (
1313
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8
1414
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2
1515
github.com/containerd/cgroups/v3 v3.0.5
16-
github.com/containerd/containerd v1.7.27
1716
github.com/containerd/containerd/api v1.9.0
1817
github.com/containerd/containerd/v2 v2.1.2
1918
github.com/containerd/continuity v0.4.5

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
6161
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
6262
github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
6363
github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins=
64-
github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII=
65-
github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0=
6664
github.com/containerd/containerd/api v1.9.0 h1:HZ/licowTRazus+wt9fM6r/9BQO7S0vD5lMcWspGIg0=
6765
github.com/containerd/containerd/api v1.9.0/go.mod h1:GhghKFmTR3hNtyznBoQ0EMWr9ju5AqHjcZPsSpTKutI=
6866
github.com/containerd/containerd/v2 v2.1.2 h1:4ZQxB+FVYmwXZgpBcKfar6ieppm3KC5C6FRKvtJ6DRU=

pkg/converter/constant.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ const (
2424
LayerAnnotationNydusSourceDigest = "containerd.io/snapshot/nydus-source-digest"
2525
LayerAnnotationNydusTargetDigest = "containerd.io/snapshot/nydus-target-digest"
2626

27-
LayerAnnotationOciSourceDigest = "containerd.io/snapshot/oci-source-digest"
28-
LayerAnnotationOciSourceReference = "containerd.io/snapshot/oci-source-reference"
29-
3027
LayerAnnotationNydusReferenceBlobIDs = "containerd.io/snapshot/nydus-reference-blob-ids"
3128

3229
LayerAnnotationUncompressed = "containerd.io/uncompressed"

pkg/converter/convert_unix.go

Lines changed: 3 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424

2525
"github.com/containerd/containerd/v2/core/content"
2626
"github.com/containerd/containerd/v2/core/images"
27-
"github.com/containerd/containerd/v2/core/images/converter"
27+
containerdConverter "github.com/containerd/containerd/v2/core/images/converter"
2828
"github.com/containerd/containerd/v2/pkg/archive"
2929
"github.com/containerd/containerd/v2/pkg/archive/compression"
3030
"github.com/containerd/containerd/v2/pkg/labels"
@@ -41,7 +41,6 @@ import (
4141

4242
"github.com/containerd/nydus-snapshotter/pkg/converter/tool"
4343
"github.com/containerd/nydus-snapshotter/pkg/label"
44-
containerdReconverter "github.com/containerd/nydus-snapshotter/pkg/reconverter"
4544
)
4645

4746
const EntryBlob = "image.blob"
@@ -948,7 +947,7 @@ func makeOCIBlobDesc(ctx context.Context, cs content.Store, uncompressedDigest,
948947

949948
// LayerConvertFunc returns a function which converts an OCI image layer to
950949
// a nydus blob layer, and set the media type to "application/vnd.oci.image.layer.nydus.blob.v1".
951-
func LayerConvertFunc(opt PackOption) converter.ConvertFunc {
950+
func LayerConvertFunc(opt PackOption) containerdConverter.ConvertFunc {
952951
return func(ctx context.Context, cs content.Store, desc ocispec.Descriptor) (*ocispec.Descriptor, error) {
953952
if ctx.Err() != nil {
954953
// The context is already cancelled, no need to proceed.
@@ -1059,7 +1058,7 @@ func LayerConvertFunc(opt PackOption) converter.ConvertFunc {
10591058
// ConvertHookFunc returns a function which will be used as a callback
10601059
// called for each blob after conversion is done. The function only hooks
10611060
// the index conversion and the manifest conversion.
1062-
func ConvertHookFunc(opt MergeOption) converter.ConvertHookFunc {
1061+
func ConvertHookFunc(opt MergeOption) containerdConverter.ConvertHookFunc {
10631062
return func(ctx context.Context, cs content.Store, orgDesc ocispec.Descriptor, newDesc *ocispec.Descriptor) (*ocispec.Descriptor, error) {
10641063
// If the previous conversion did not occur, the `newDesc` may be nil.
10651064
if newDesc == nil {
@@ -1198,148 +1197,6 @@ func convertManifest(ctx context.Context, cs content.Store, oldDesc ocispec.Desc
11981197
return newManifestDesc, nil
11991198
}
12001199

1201-
func ReconvertHookFunc() containerdReconverter.ConvertHookFunc {
1202-
return func(ctx context.Context, cs content.Store, _ ocispec.Descriptor, newDesc *ocispec.Descriptor) (*ocispec.Descriptor, error) {
1203-
desc := newDesc
1204-
if !images.IsManifestType(desc.MediaType) {
1205-
return desc, nil
1206-
}
1207-
if IsNydusBootstrap(*desc) {
1208-
return desc, nil
1209-
}
1210-
var err error
1211-
var labels map[string]string
1212-
switch desc.MediaType {
1213-
case ocispec.MediaTypeImageManifest, images.MediaTypeDockerSchema2Manifest:
1214-
var manifest ocispec.Manifest
1215-
labels, err = readJSON(ctx, cs, &manifest, *desc)
1216-
if err != nil {
1217-
return nil, errors.Wrap(err, "read manifest")
1218-
}
1219-
1220-
desc, err = writeJSON(ctx, cs, manifest, *desc, labels)
1221-
if err != nil {
1222-
return nil, errors.Wrap(err, "write manifest")
1223-
}
1224-
return desc, nil
1225-
1226-
case ocispec.MediaTypeImageIndex, images.MediaTypeDockerSchema2ManifestList:
1227-
var index ocispec.Index
1228-
labels, err = readJSON(ctx, cs, &index, *desc)
1229-
if err != nil {
1230-
return nil, errors.Wrap(err, "read manifest index")
1231-
}
1232-
for idx, maniDesc := range index.Manifests {
1233-
var manifest ocispec.Manifest
1234-
labels, err = readJSON(ctx, cs, &manifest, maniDesc)
1235-
if err != nil {
1236-
return nil, errors.Wrap(err, "read manifest")
1237-
}
1238-
1239-
newManiDesc, err := writeJSON(ctx, cs, manifest, maniDesc, labels)
1240-
if err != nil {
1241-
return nil, errors.Wrap(err, "write manifest")
1242-
}
1243-
index.Manifests[idx] = *newManiDesc
1244-
}
1245-
desc, err = writeJSON(ctx, cs, index, *desc, labels)
1246-
if err != nil {
1247-
return nil, errors.Wrap(err, "write manifest index")
1248-
}
1249-
1250-
return desc, nil
1251-
1252-
default:
1253-
return nil, errors.Errorf("unsupported media type %s", desc.MediaType)
1254-
}
1255-
}
1256-
}
1257-
1258-
func LayerReconvertFunc(opt UnpackOption) containerdReconverter.ConvertFunc {
1259-
return func(ctx context.Context, cs content.Store, desc ocispec.Descriptor) (*ocispec.Descriptor, error) {
1260-
if !images.IsLayerType(desc.MediaType) {
1261-
return nil, nil
1262-
}
1263-
1264-
// Skip the nydus bootstrap layer.
1265-
if IsNydusBootstrap(desc) {
1266-
logrus.Debugf("skip nydus bootstrap layer %s", desc.Digest.String())
1267-
return &desc, nil
1268-
}
1269-
1270-
ra, err := cs.ReaderAt(ctx, desc)
1271-
if err != nil {
1272-
return nil, errors.Wrap(err, "get reader")
1273-
}
1274-
defer ra.Close()
1275-
1276-
ref := fmt.Sprintf("convert-oci-from-%s", desc.Digest)
1277-
cw, err := content.OpenWriter(ctx, cs, content.WithRef(ref))
1278-
if err != nil {
1279-
return nil, errors.Wrap(err, "open blob writer")
1280-
}
1281-
1282-
var gw io.WriteCloser
1283-
var mediaType string
1284-
switch opt.Compressor {
1285-
case "gzip":
1286-
gw = gzip.NewWriter(cw)
1287-
mediaType = ocispec.MediaTypeImageLayerGzip
1288-
default:
1289-
gw, err = zstd.NewWriter(cw)
1290-
if err != nil {
1291-
return nil, errors.Wrap(err, "create zstd writer")
1292-
}
1293-
mediaType = ocispec.MediaTypeImageLayerZstd
1294-
}
1295-
var data bytes.Buffer
1296-
writer := io.Writer(&data)
1297-
uncompressedDgster := digest.SHA256.Digester()
1298-
1299-
err = Unpack(ctx, ra, writer, opt)
1300-
if err != nil {
1301-
return nil, errors.Wrap(err, "unpack nydus to tar")
1302-
}
1303-
1304-
compressed := io.MultiWriter(gw, uncompressedDgster.Hash())
1305-
// _, err = uncompressedDgster.Hash().Write(data.Bytes())
1306-
1307-
buffer := bufPool.Get().(*[]byte)
1308-
defer bufPool.Put(buffer)
1309-
if _, err = io.CopyBuffer(compressed, bytes.NewReader(data.Bytes()), *buffer); err != nil {
1310-
return nil, errors.Wrapf(err, "copy bootstrap targz into content store")
1311-
}
1312-
if err = gw.Close(); err != nil {
1313-
return nil, errors.Wrap(err, "close gzip writer")
1314-
}
1315-
1316-
uncompressedDigest := uncompressedDgster.Digest()
1317-
compressedDgst := cw.Digest()
1318-
if err = cw.Commit(ctx, 0, compressedDgst, content.WithLabels(map[string]string{
1319-
LayerAnnotationUncompressed: uncompressedDigest.String(),
1320-
})); err != nil {
1321-
if !errdefs.IsAlreadyExists(err) {
1322-
return nil, errors.Wrap(err, "commit to content store")
1323-
}
1324-
}
1325-
if err = cw.Close(); err != nil {
1326-
return nil, errors.Wrap(err, "close content store writer")
1327-
}
1328-
1329-
newDesc, err := makeOCIBlobDesc(ctx, cs, uncompressedDigest, compressedDgst, mediaType)
1330-
if err != nil {
1331-
return nil, err
1332-
}
1333-
1334-
if opt.Backend != nil {
1335-
if err := opt.Backend.Push(ctx, cs, *newDesc); err != nil {
1336-
return nil, errors.Wrap(err, "push to storage backend")
1337-
}
1338-
}
1339-
return newDesc, nil
1340-
}
1341-
}
1342-
13431200
// MergeLayers merges a list of nydus blob layer into a nydus bootstrap layer.
13441201
// The media type of the nydus bootstrap layer is "application/vnd.oci.image.layer.v1.tar+gzip".
13451202
func MergeLayers(ctx context.Context, cs content.Store, descs []ocispec.Descriptor, opt MergeOption) (*ocispec.Descriptor, []ocispec.Descriptor, error) {

pkg/converter/convert_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ func ConvertHookFunc(opt MergeOption) converter.ConvertHookFunc {
5353

5454
func MergeLayers(ctx context.Context, cs content.Store, descs []ocispec.Descriptor, opt MergeOption) (*ocispec.Descriptor, []ocispec.Descriptor, error) {
5555
panic("not implemented")
56-
}
56+
}

0 commit comments

Comments
 (0)