Merge pull request #3911 from ktock/passinfo
Enable to propagate necessary information to snapshotter during unpack
This commit is contained in:
commit
6b94b646b7
@ -219,7 +219,7 @@ func (s *snapshotter) Update(ctx context.Context, info snapshots.Info, fieldpath
|
||||
|
||||
inner := snapshots.Info{
|
||||
Name: bkey,
|
||||
Labels: filterInheritedLabels(local.Labels),
|
||||
Labels: snapshots.FilterInheritedLabels(local.Labels),
|
||||
}
|
||||
|
||||
// NOTE: Perform this inside the transaction to reduce the
|
||||
@ -306,7 +306,7 @@ func (s *snapshotter) createSnapshot(ctx context.Context, key, parent string, re
|
||||
bparent string
|
||||
bkey string
|
||||
bopts = []snapshots.Opt{
|
||||
snapshots.WithLabels(filterInheritedLabels(base.Labels)),
|
||||
snapshots.WithLabels(snapshots.FilterInheritedLabels(base.Labels)),
|
||||
}
|
||||
)
|
||||
|
||||
@ -586,7 +586,7 @@ func (s *snapshotter) Commit(ctx context.Context, name, key string, opts ...snap
|
||||
return err
|
||||
}
|
||||
|
||||
inheritedOpt := snapshots.WithLabels(filterInheritedLabels(base.Labels))
|
||||
inheritedOpt := snapshots.WithLabels(snapshots.FilterInheritedLabels(base.Labels))
|
||||
|
||||
// NOTE: Backend snapshotters should commit fast and reliably to
|
||||
// prevent metadata store locking and minimizing rollbacks.
|
||||
@ -939,20 +939,3 @@ func (s *snapshotter) pruneBranch(ctx context.Context, node *treeNode) error {
|
||||
func (s *snapshotter) Close() error {
|
||||
return s.Snapshotter.Close()
|
||||
}
|
||||
|
||||
// filterInheritedLabels filters the provided labels by removing any key which
|
||||
// isn't a snapshot label. Snapshot labels have a prefix of "containerd.io/snapshot/"
|
||||
// or are the "containerd.io/snapshot.ref" label.
|
||||
func filterInheritedLabels(labels map[string]string) map[string]string {
|
||||
if labels == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
filtered := make(map[string]string)
|
||||
for k, v := range labels {
|
||||
if k == labelSnapshotRef || strings.HasPrefix(k, inheritedLabelsPrefix) {
|
||||
filtered[k] = v
|
||||
}
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
@ -227,7 +227,7 @@ func TestFilterInheritedLabels(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
if actual := filterInheritedLabels(test.labels); !reflect.DeepEqual(actual, test.expected) {
|
||||
if actual := snapshots.FilterInheritedLabels(test.labels); !reflect.DeepEqual(actual, test.expected) {
|
||||
t.Fatalf("expected %v but got %v", test.expected, actual)
|
||||
}
|
||||
}
|
||||
|
2
pull.go
2
pull.go
@ -81,7 +81,7 @@ func (c *Client) Pull(ctx context.Context, ref string, opts ...RemoteOpt) (_ Ima
|
||||
if wrapper == nil {
|
||||
return unpackWrapper(h)
|
||||
}
|
||||
return wrapper(unpackWrapper(h))
|
||||
return unpackWrapper(wrapper(h))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,11 @@ import (
|
||||
"github.com/containerd/containerd/mount"
|
||||
)
|
||||
|
||||
const (
|
||||
inheritedLabelsPrefix = "containerd.io/snapshot/"
|
||||
labelSnapshotRef = "containerd.io/snapshot.ref"
|
||||
)
|
||||
|
||||
// Kind identifies the kind of snapshot.
|
||||
type Kind uint8
|
||||
|
||||
@ -346,3 +351,20 @@ func WithLabels(labels map[string]string) Opt {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// FilterInheritedLabels filters the provided labels by removing any key which
|
||||
// isn't a snapshot label. Snapshot labels have a prefix of "containerd.io/snapshot/"
|
||||
// or are the "containerd.io/snapshot.ref" label.
|
||||
func FilterInheritedLabels(labels map[string]string) map[string]string {
|
||||
if labels == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
filtered := make(map[string]string)
|
||||
for k, v := range labels {
|
||||
if k == labelSnapshotRef || strings.HasPrefix(k, inheritedLabelsPrefix) {
|
||||
filtered[k] = v
|
||||
}
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
14
unpacker.go
14
unpacker.go
@ -41,6 +41,10 @@ import (
|
||||
"golang.org/x/sync/semaphore"
|
||||
)
|
||||
|
||||
const (
|
||||
labelSnapshotRef = "containerd.io/snapshot.ref"
|
||||
)
|
||||
|
||||
type unpacker struct {
|
||||
updateCh chan ocispec.Descriptor
|
||||
snapshotter string
|
||||
@ -113,9 +117,13 @@ EachLayer:
|
||||
return errors.Wrapf(err, "failed to stat snapshot %s", chainID)
|
||||
}
|
||||
|
||||
labelOpt := snapshots.WithLabels(map[string]string{
|
||||
"containerd.io/snapshot.ref": chainID,
|
||||
})
|
||||
// inherits annotations which are provided as snapshot labels.
|
||||
labels := snapshots.FilterInheritedLabels(desc.Annotations)
|
||||
if labels == nil {
|
||||
labels = make(map[string]string)
|
||||
}
|
||||
labels[labelSnapshotRef] = chainID
|
||||
labelOpt := snapshots.WithLabels(labels)
|
||||
|
||||
var (
|
||||
key string
|
||||
|
Loading…
Reference in New Issue
Block a user