瀏覽代碼

Merge pull request #47520 from vvoland/buildkit-v13-leaseutil

builder-next/export: Use leaseutil for descref lease
Bjorn Neergaard 1 年之前
父節點
當前提交
6c10086976
共有 1 個文件被更改,包括 15 次插入6 次删除
  1. 15 6
      builder/builder-next/exporter/mobyexporter/export.go

+ 15 - 6
builder/builder-next/exporter/mobyexporter/export.go

@@ -5,16 +5,18 @@ import (
 	"context"
 	"fmt"
 	"strings"
-	"time"
 
 	"github.com/containerd/containerd/content"
 	"github.com/containerd/containerd/leases"
+	"github.com/containerd/log"
 	distref "github.com/distribution/reference"
 	"github.com/docker/docker/image"
+	"github.com/docker/docker/internal/compatcontext"
 	"github.com/docker/docker/layer"
 	"github.com/moby/buildkit/exporter"
 	"github.com/moby/buildkit/exporter/containerimage"
 	"github.com/moby/buildkit/exporter/containerimage/exptypes"
+	"github.com/moby/buildkit/util/leaseutil"
 	"github.com/opencontainers/go-digest"
 	ocispec "github.com/opencontainers/image-spec/specs-go/v1"
 	"github.com/pkg/errors"
@@ -222,22 +224,29 @@ func (e *imageExporterInstance) newTempReference(ctx context.Context, config []b
 	lm := e.opt.LeaseManager
 
 	dgst := digest.FromBytes(config)
-	lease, err := lm.Create(ctx, leases.WithRandomID(), leases.WithExpiration(time.Hour))
+	leaseCtx, done, err := leaseutil.WithLease(ctx, lm, leaseutil.MakeTemporary)
 	if err != nil {
 		return nil, err
 	}
 
+	unlease := func(ctx context.Context) error {
+		err := done(compatcontext.WithoutCancel(ctx))
+		if err != nil {
+			log.G(ctx).WithError(err).Error("failed to delete descriptor reference lease")
+		}
+		return err
+	}
+
 	desc := ocispec.Descriptor{
 		Digest:    dgst,
 		MediaType: "application/vnd.docker.container.image.v1+json",
 		Size:      int64(len(config)),
 	}
 
-	if err := content.WriteBlob(ctx, e.opt.ContentStore, desc.Digest.String(), bytes.NewReader(config), desc); err != nil {
+	if err := content.WriteBlob(leaseCtx, e.opt.ContentStore, desc.Digest.String(), bytes.NewReader(config), desc); err != nil {
+		unlease(leaseCtx)
 		return nil, fmt.Errorf("failed to save temporary image config: %w", err)
 	}
 
-	return containerimage.NewDescriptorReference(desc, func(ctx context.Context) error {
-		return lm.Delete(ctx, lease)
-	}), nil
+	return containerimage.NewDescriptorReference(desc, unlease), nil
 }