Skip to content

Commit

Permalink
Compute diff from the upper dir of overlayfs-based snapshotter
Browse files Browse the repository at this point in the history
Signed-off-by: Kohei Tokunaga <[email protected]>
  • Loading branch information
ktock committed Sep 2, 2021
1 parent 89ebbe5 commit 2a4af80
Show file tree
Hide file tree
Showing 5 changed files with 928 additions and 8 deletions.
44 changes: 37 additions & 7 deletions cache/blobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
"os"

"github.com/containerd/containerd/content"
"github.com/containerd/containerd/diff"
Expand All @@ -17,6 +18,7 @@ import (
imagespecidentity "github.com/opencontainers/image-spec/identity"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"golang.org/x/sync/errgroup"
)

Expand Down Expand Up @@ -106,13 +108,30 @@ func computeBlobChain(ctx context.Context, sr *immutableRef, createIfNeeded bool
if release != nil {
defer release()
}
desc, err := sr.cm.Differ.Compare(ctx, lower, upper,
diff.WithMediaType(mediaType),
diff.WithReference(sr.ID()),
diff.WithCompressor(compressorFunc),
)
if err != nil {
return nil, err
var desc ocispecs.Descriptor
if len(lower) > 0 && !isTypeWindows(sr) {
// Try optimized diff for overlayfs
computed, ok, err := sr.tryComputeOverlayBlob(ctx, lower, upper, mediaType, sr.ID(), compressorFunc)
if err != nil {
if debugMustOverlayDiff(sr.cm.ManagerOpt.Snapshotter.Name()) {
// fallback is disabled. used for testing/debugging.
return nil, errors.Wrapf(err, "failed to compute overlay blob")
}
logrus.Warnf("failed to compute blob (%s) from diff of overlay snapshotter: %+v", sr.ID(), err)
}
if ok {
desc = computed
}
}
if desc.Digest == "" {
desc, err = sr.cm.Differ.Compare(ctx, lower, upper,
diff.WithMediaType(mediaType),
diff.WithReference(sr.ID()),
diff.WithCompressor(compressorFunc),
)
if err != nil {
return nil, err
}
}

if desc.Annotations == nil {
Expand Down Expand Up @@ -308,3 +327,14 @@ func ensureCompression(ctx context.Context, ref *immutableRef, compressionType c
})
return err
}

func debugMustOverlayDiff(snapshotter string) bool {
if os.Getenv("BUILDKIT_DEBUG_FORCE_OVERLAY_DIFF") != "1" {
return false
}
switch snapshotter {
case "overlayfs", "fuse-overlayfs", "stargz":
return true
}
return false
}
Loading

0 comments on commit 2a4af80

Please sign in to comment.