Merge pull request #8726 from djdongjin/write-content

Remove duplicated `writeIndex` func
This commit is contained in:
Phil Estes 2023-06-22 21:33:22 -04:00 committed by GitHub
commit 13498a3258
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 39 deletions

View File

@ -546,6 +546,19 @@ func writeIndex(ctx context.Context, index *ocispec.Index, client *Client, ref s
return writeContent(ctx, client.ContentStore(), ocispec.MediaTypeImageIndex, ref, bytes.NewReader(data), content.WithLabels(labels)) return writeContent(ctx, client.ContentStore(), ocispec.MediaTypeImageIndex, ref, bytes.NewReader(data), content.WithLabels(labels))
} }
func decodeIndex(ctx context.Context, store content.Provider, desc ocispec.Descriptor) (*ocispec.Index, error) {
var index ocispec.Index
p, err := content.ReadBlob(ctx, store, desc)
if err != nil {
return nil, err
}
if err := json.Unmarshal(p, &index); err != nil {
return nil, err
}
return &index, nil
}
// GetLabel gets a label value from namespace store // GetLabel gets a label value from namespace store
// If there is no default label, an empty string returned with nil error // If there is no default label, an empty string returned with nil error
func (c *Client) GetLabel(ctx context.Context, label string) (string, error) { func (c *Client) GetLabel(ctx context.Context, label string) (string, error) {

View File

@ -18,10 +18,8 @@ package containerd
import ( import (
"context" "context"
"encoding/json"
"io" "io"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/images/archive" "github.com/containerd/containerd/images/archive"
@ -167,16 +165,11 @@ func (c *Client) Import(ctx context.Context, reader io.Reader, opts ...ImportOpt
return images.Children(ctx, cs, desc) return images.Children(ctx, cs, desc)
} }
p, err := content.ReadBlob(ctx, cs, desc) idx, err := decodeIndex(ctx, cs, desc)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var idx ocispec.Index
if err := json.Unmarshal(p, &idx); err != nil {
return nil, err
}
for _, m := range idx.Manifests { for _, m := range idx.Manifests {
name := imageName(m.Annotations, iopts.imageRefT) name := imageName(m.Annotations, iopts.imageRefT)
if name != "" { if name != "" {

16
task.go
View File

@ -17,9 +17,7 @@
package containerd package containerd
import ( import (
"bytes"
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"io" "io"
@ -511,7 +509,7 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (Imag
return nil, err return nil, err
} }
} }
desc, err := t.writeIndex(ctx, &index) desc, err := writeIndex(ctx, &index, t.client, t.id)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -662,18 +660,6 @@ func (t *task) checkpointImage(ctx context.Context, index *v1.Index, image strin
return nil return nil
} }
func (t *task) writeIndex(ctx context.Context, index *v1.Index) (d v1.Descriptor, err error) {
labels := map[string]string{}
for i, m := range index.Manifests {
labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i)] = m.Digest.String()
}
buf := bytes.NewBuffer(nil)
if err := json.NewEncoder(buf).Encode(index); err != nil {
return v1.Descriptor{}, err
}
return writeContent(ctx, t.client.ContentStore(), v1.MediaTypeImageIndex, t.id, buf, content.WithLabels(labels))
}
func writeContent(ctx context.Context, store content.Ingester, mediaType, ref string, r io.Reader, opts ...content.Opt) (d v1.Descriptor, err error) { func writeContent(ctx context.Context, store content.Ingester, mediaType, ref string, r io.Reader, opts ...content.Opt) (d v1.Descriptor, err error) {
writer, err := store.Writer(ctx, content.WithRef(ref)) writer, err := store.Writer(ctx, content.WithRef(ref))
if err != nil { if err != nil {

View File

@ -18,18 +18,15 @@ package containerd
import ( import (
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"syscall" "syscall"
"github.com/containerd/containerd/api/types" "github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/mount" "github.com/containerd/containerd/mount"
"github.com/containerd/containerd/runtime/v2/runc/options" "github.com/containerd/containerd/runtime/v2/runc/options"
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/opencontainers/runtime-spec/specs-go" "github.com/opencontainers/runtime-spec/specs-go"
) )
@ -79,19 +76,6 @@ func WithTaskCheckpoint(im Image) NewTaskOpts {
} }
} }
func decodeIndex(ctx context.Context, store content.Provider, desc imagespec.Descriptor) (*imagespec.Index, error) {
var index imagespec.Index
p, err := content.ReadBlob(ctx, store, desc)
if err != nil {
return nil, err
}
if err := json.Unmarshal(p, &index); err != nil {
return nil, err
}
return &index, nil
}
// WithCheckpointName sets the image name for the checkpoint // WithCheckpointName sets the image name for the checkpoint
func WithCheckpointName(name string) CheckpointTaskOpts { func WithCheckpointName(name string) CheckpointTaskOpts {
return func(r *CheckpointTaskInfo) error { return func(r *CheckpointTaskInfo) error {