Browse code

daemon/containerd: log errors when releasing leases

Log a warning if we encounter an error when releasing leases. While it
may not have direct consequences, failing to release the lease should be
unexpected, so let's make them visible.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2023/08/25 06:51:39
Showing 4 changed files
... ...
@@ -460,11 +460,15 @@ func (i *ImageService) CreateImage(ctx context.Context, config []byte, parent st
460 460
 
461 461
 	// necessary to prevent the contents from being GC'd
462 462
 	// between writing them here and creating an image
463
-	ctx, done, err := i.client.WithLease(ctx, leases.WithRandomID(), leases.WithExpiration(1*time.Hour))
463
+	ctx, release, err := i.client.WithLease(ctx, leases.WithRandomID(), leases.WithExpiration(1*time.Hour))
464 464
 	if err != nil {
465 465
 		return nil, err
466 466
 	}
467
-	defer done(ctx)
467
+	defer func() {
468
+		if err := release(ctx); err != nil {
469
+			log.G(ctx).WithError(err).Warn("failed to release lease created for create")
470
+		}
471
+	}()
468 472
 
469 473
 	commitManifestDesc, err := writeContentsForImage(ctx, i.snapshotter, i.client.ContentStore(), ociImgToCreate, layers)
470 474
 	if err != nil {
... ...
@@ -68,11 +68,15 @@ func (i *ImageService) CommitImage(ctx context.Context, cc backend.CommitConfig)
68 68
 	)
69 69
 
70 70
 	// Don't gc me and clean the dirty data after 1 hour!
71
-	ctx, done, err := i.client.WithLease(ctx, leases.WithRandomID(), leases.WithExpiration(1*time.Hour))
71
+	ctx, release, err := i.client.WithLease(ctx, leases.WithRandomID(), leases.WithExpiration(1*time.Hour))
72 72
 	if err != nil {
73 73
 		return "", fmt.Errorf("failed to create lease for commit: %w", err)
74 74
 	}
75
-	defer done(ctx)
75
+	defer func() {
76
+		if err := release(ctx); err != nil {
77
+			log.G(ctx).WithError(err).Warn("failed to release lease created for commit")
78
+		}
79
+	}()
76 80
 
77 81
 	diffLayerDesc, diffID, err := createDiff(ctx, cc.ContainerID, sn, cs, differ)
78 82
 	if err != nil {
... ...
@@ -46,7 +46,11 @@ func (i *ImageService) ImportImage(ctx context.Context, ref reference.Named, pla
46 46
 	if err != nil {
47 47
 		return "", errdefs.System(err)
48 48
 	}
49
-	defer release(ctx)
49
+	defer func() {
50
+		if err := release(ctx); err != nil {
51
+			logger.WithError(err).Warn("failed to release lease created for import")
52
+		}
53
+	}()
50 54
 
51 55
 	if platform == nil {
52 56
 		def := platforms.DefaultSpec()
... ...
@@ -46,9 +46,8 @@ func (i *ImageService) PushImage(ctx context.Context, targetRef reference.Named,
46 46
 		return err
47 47
 	}
48 48
 	defer func() {
49
-		err := release(leasedCtx)
50
-		if err != nil && !cerrdefs.IsNotFound(err) {
51
-			log.G(ctx).WithField("image", targetRef).WithError(err).Error("failed to delete lease created for push")
49
+		if err := release(leasedCtx); err != nil {
50
+			log.G(ctx).WithField("image", targetRef).WithError(err).Warn("failed to release lease created for push")
52 51
 		}
53 52
 	}()
54 53