diff --git a/cache/manager.go b/cache/manager.go index 4136253faca0..b801da86043d 100644 --- a/cache/manager.go +++ b/cache/manager.go @@ -17,7 +17,7 @@ import ( "github.com/moby/buildkit/identity" "github.com/moby/buildkit/snapshot" "github.com/opencontainers/go-digest" - imagespaceidentity "github.com/opencontainers/image-spec/identity" + imagespecidentity "github.com/opencontainers/image-spec/identity" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -98,7 +98,7 @@ func (cm *cacheManager) GetByBlob(ctx context.Context, desc ocispec.Descriptor, return nil, err } chainID := diffID - blobChainID := imagespaceidentity.ChainID([]digest.Digest{desc.Digest, diffID}) + blobChainID := imagespecidentity.ChainID([]digest.Digest{desc.Digest, diffID}) if _, err := cm.ContentStore.Info(ctx, desc.Digest); err != nil { return nil, errors.Wrapf(err, "failed to get blob %s", desc.Digest) @@ -111,8 +111,8 @@ func (cm *cacheManager) GetByBlob(ctx context.Context, desc ocispec.Descriptor, if pInfo.ChainID == "" || pInfo.BlobChainID == "" { return nil, errors.Errorf("failed to get ref by blob on non-adressable parent") } - chainID = imagespaceidentity.ChainID([]digest.Digest{pInfo.ChainID, chainID}) - blobChainID = imagespaceidentity.ChainID([]digest.Digest{pInfo.BlobChainID, blobChainID}) + chainID = imagespecidentity.ChainID([]digest.Digest{pInfo.ChainID, chainID}) + blobChainID = imagespecidentity.ChainID([]digest.Digest{pInfo.BlobChainID, blobChainID}) p2, err := cm.Get(ctx, parent.ID(), NoUpdateLastUsed) if err != nil { return nil, err diff --git a/cache/metadata.go b/cache/metadata.go index 8cded947b913..bf4041e098a3 100644 --- a/cache/metadata.go +++ b/cache/metadata.go @@ -264,7 +264,7 @@ func queueParent(si *metadata.StorageItem, parent string) error { } v, err := metadata.NewValue(parent) if err != nil { - return errors.Wrap(err, "failed to create size value") + return errors.Wrap(err, "failed to create parent value") } si.Update(func(b *bolt.Bucket) error { return si.SetValue(b, keyParent, v) diff --git a/cache/migrate_v2.go b/cache/migrate_v2.go index 9064fb3f6642..c880862c265d 100644 --- a/cache/migrate_v2.go +++ b/cache/migrate_v2.go @@ -106,7 +106,6 @@ func MigrateV2(ctx context.Context, from, to string, cs content.Store, s snapsho // add committed, parent, snapshot for id, item := range byID { em := getEqualMutable(item) - var parent string if em == "" { info, err := s.Stat(ctx, id) if err != nil { @@ -115,8 +114,9 @@ func MigrateV2(ctx context.Context, from, to string, cs content.Store, s snapsho if info.Kind == snapshots.KindCommitted { queueCommitted(item) } - parent = info.Parent - queueParent(item, parent) + if info.Parent != "" { + queueParent(item, info.Parent) + } } else { queueCommitted(item) } diff --git a/cache/refs.go b/cache/refs.go index e7cba4329062..89c260a6e281 100644 --- a/cache/refs.go +++ b/cache/refs.go @@ -16,8 +16,9 @@ import ( "github.com/moby/buildkit/identity" "github.com/moby/buildkit/snapshot" "github.com/moby/buildkit/util/flightcontrol" + "github.com/moby/buildkit/util/leaseutil" "github.com/opencontainers/go-digest" - imagespaceidentity "github.com/opencontainers/image-spec/identity" + imagespecidentity "github.com/opencontainers/image-spec/identity" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -230,11 +231,10 @@ func (cr *cacheRecord) Mount(ctx context.Context, readonly bool) (snapshot.Mount l, err := cr.cm.LeaseManager.Create(ctx, func(l *leases.Lease) error { l.ID = view l.Labels = map[string]string{ - "containerd.io/gc.flat": time.Now().UTC().Format(time.RFC3339Nano), - "buildkit/lease.temporary": "", + "containerd.io/gc.flat": time.Now().UTC().Format(time.RFC3339Nano), } return nil - }) + }, leaseutil.MakeTemporary) if err != nil { return nil, err } @@ -404,10 +404,10 @@ func (sr *immutableRef) SetBlob(ctx context.Context, desc ocispec.Descriptor) er queueDiffID(sr.md, diffID.String()) queueBlob(sr.md, desc.Digest.String()) chainID := diffID - blobChainID := imagespaceidentity.ChainID([]digest.Digest{desc.Digest, diffID}) + blobChainID := imagespecidentity.ChainID([]digest.Digest{desc.Digest, diffID}) if parentChainID != "" { - chainID = imagespaceidentity.ChainID([]digest.Digest{parentChainID, chainID}) - blobChainID = imagespaceidentity.ChainID([]digest.Digest{parentBlobChainID, blobChainID}) + chainID = imagespecidentity.ChainID([]digest.Digest{parentChainID, chainID}) + blobChainID = imagespecidentity.ChainID([]digest.Digest{parentBlobChainID, blobChainID}) } queueChainID(sr.md, chainID.String()) queueBlobChainID(sr.md, blobChainID.String()) diff --git a/exporter/containerimage/export.go b/exporter/containerimage/export.go index 300723490127..edc6673cfebf 100644 --- a/exporter/containerimage/export.go +++ b/exporter/containerimage/export.go @@ -144,13 +144,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src exporter.Source) src.Metadata[k] = v } - ctx, done, err := leaseutil.WithLease(ctx, e.opt.LeaseManager, func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx, done, err := leaseutil.WithLease(ctx, e.opt.LeaseManager, leaseutil.MakeTemporary) if err != nil { return nil, err } diff --git a/exporter/oci/export.go b/exporter/oci/export.go index 957f9109b854..4c1d9218f424 100644 --- a/exporter/oci/export.go +++ b/exporter/oci/export.go @@ -116,13 +116,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src exporter.Source) src.Metadata[k] = v } - ctx, done, err := leaseutil.WithLease(ctx, e.opt.LeaseManager, func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx, done, err := leaseutil.WithLease(ctx, e.opt.LeaseManager, leaseutil.MakeTemporary) if err != nil { return nil, err } diff --git a/source/containerimage/pull.go b/source/containerimage/pull.go index a1005f3aca6b..aa817e2d4c40 100644 --- a/source/containerimage/pull.go +++ b/source/containerimage/pull.go @@ -192,13 +192,7 @@ func (p *puller) Snapshot(ctx context.Context) (ir cache.ImmutableRef, err error // workaround for gcr, authentication not supported on blob endpoints pull.EnsureManifestRequested(ctx, p.Puller.Resolver, p.Puller.Src.String()) - ctx, done, err := leaseutil.WithLease(ctx, p.LeaseManager, func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx, done, err := leaseutil.WithLease(ctx, p.LeaseManager, leaseutil.MakeTemporary) if err != nil { return nil, err } diff --git a/util/imageutil/config.go b/util/imageutil/config.go index cbe91670bdf3..9568864a5522 100644 --- a/util/imageutil/config.go +++ b/util/imageutil/config.go @@ -49,13 +49,7 @@ func Config(ctx context.Context, str string, resolver remotes.Resolver, cache Co } if leaseManager != nil { - ctx2, done, err := leaseutil.WithLease(ctx, leaseManager, leases.WithExpiration(5*time.Minute), func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx2, done, err := leaseutil.WithLease(ctx, leaseManager, leases.WithExpiration(5*time.Minute), leaseutil.MakeTemporary) if err != nil { return "", nil, errors.WithStack(err) } diff --git a/util/leaseutil/manager.go b/util/leaseutil/manager.go index 3c680960b4b2..45a35273a51d 100644 --- a/util/leaseutil/manager.go +++ b/util/leaseutil/manager.go @@ -27,6 +27,14 @@ func WithLease(ctx context.Context, ls leases.Manager, opts ...leases.Opt) (cont }, nil } +func MakeTemporary(l *leases.Lease) error { + if l.Labels == nil { + l.Labels = map[string]string{} + } + l.Labels["buildkit/lease.temporary"] = time.Now().UTC().Format(time.RFC3339Nano) + return nil +} + func WithNamespace(lm leases.Manager, ns string) leases.Manager { return &nsLM{manager: lm, ns: ns} } diff --git a/worker/base/worker.go b/worker/base/worker.go index 86c6aab4b0ac..802ccf0c239d 100644 --- a/worker/base/worker.go +++ b/worker/base/worker.go @@ -342,13 +342,7 @@ func (w *Worker) Exporter(name string, sm *session.Manager) (exporter.Exporter, } func (w *Worker) GetRemote(ctx context.Context, ref cache.ImmutableRef, createIfNeeded bool) (*solver.Remote, error) { - ctx, done, err := leaseutil.WithLease(ctx, w.LeaseManager, func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx, done, err := leaseutil.WithLease(ctx, w.LeaseManager, leaseutil.MakeTemporary) if err != nil { return nil, err } @@ -407,13 +401,7 @@ func getCreatedTimes(ref cache.ImmutableRef) (out []time.Time) { } func (w *Worker) FromRemote(ctx context.Context, remote *solver.Remote) (ref cache.ImmutableRef, err error) { - ctx, done, err := leaseutil.WithLease(ctx, w.LeaseManager, func(l *leases.Lease) error { - if l.Labels == nil { - l.Labels = map[string]string{} - } - l.Labels["buildkit/lease.temporary"] = "" - return nil - }) + ctx, done, err := leaseutil.WithLease(ctx, w.LeaseManager, leaseutil.MakeTemporary) if err != nil { return nil, err }