Clear root labels during checkpoint
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
e201be5196
commit
e833da1356
27
task.go
27
task.go
@ -387,6 +387,15 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (Imag
|
|||||||
index := v1.Index{
|
index := v1.Index{
|
||||||
Annotations: make(map[string]string),
|
Annotations: make(map[string]string),
|
||||||
}
|
}
|
||||||
|
// make sure we clear the gc root labels reguardless of success
|
||||||
|
var clearRoots []ocispec.Descriptor
|
||||||
|
defer func() {
|
||||||
|
for _, r := range append(index.Manifests, clearRoots...) {
|
||||||
|
if err := clearRootGCLabel(ctx, t.client, r); err != nil {
|
||||||
|
log.G(ctx).WithError(err).WithField("dgst", r.Digest).Warnf("failed to remove root marker")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
if err := t.checkpointTask(ctx, &index, request); err != nil {
|
if err := t.checkpointTask(ctx, &index, request); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -405,6 +414,7 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (Imag
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
clearRoots = append(clearRoots, desc)
|
||||||
im := images.Image{
|
im := images.Image{
|
||||||
Name: i.Name,
|
Name: i.Name,
|
||||||
Target: desc,
|
Target: desc,
|
||||||
@ -552,24 +562,13 @@ func (t *task) writeIndex(ctx context.Context, index *v1.Index) (d v1.Descriptor
|
|||||||
labels := map[string]string{
|
labels := map[string]string{
|
||||||
"containerd.io/gc.root": time.Now().UTC().Format(time.RFC3339),
|
"containerd.io/gc.root": time.Now().UTC().Format(time.RFC3339),
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, m := range index.Manifests {
|
for i, m := range index.Manifests {
|
||||||
labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i)] = m.Digest.String()
|
labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i)] = m.Digest.String()
|
||||||
defer func(m ocispec.Descriptor) {
|
|
||||||
if err == nil {
|
|
||||||
info := content.Info{Digest: m.Digest}
|
|
||||||
if _, uerr := t.client.ContentStore().Update(ctx, info, "labels.containerd.io/gc.root"); uerr != nil {
|
|
||||||
log.G(ctx).WithError(uerr).WithField("dgst", m.Digest).Warnf("failed to remove root marker")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}(m)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := bytes.NewBuffer(nil)
|
buf := bytes.NewBuffer(nil)
|
||||||
if err := json.NewEncoder(buf).Encode(index); err != nil {
|
if err := json.NewEncoder(buf).Encode(index); err != nil {
|
||||||
return v1.Descriptor{}, err
|
return v1.Descriptor{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return writeContent(ctx, t.client.ContentStore(), v1.MediaTypeImageIndex, t.id, buf, content.WithLabels(labels))
|
return writeContent(ctx, t.client.ContentStore(), v1.MediaTypeImageIndex, t.id, buf, content.WithLabels(labels))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,3 +591,9 @@ func writeContent(ctx context.Context, store content.Store, mediaType, ref strin
|
|||||||
Size: size,
|
Size: size,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func clearRootGCLabel(ctx context.Context, client *Client, desc ocispec.Descriptor) error {
|
||||||
|
info := content.Info{Digest: desc.Digest}
|
||||||
|
_, err := client.ContentStore().Update(ctx, info, "labels.containerd.io/gc.root")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user