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 <ktokunaga.mail@gmail.com>
  • Loading branch information
ktock committed Sep 2, 2021
1 parent 89ebbe5 commit f105370
Show file tree
Hide file tree
Showing 5 changed files with 924 additions and 8 deletions.
40 changes: 33 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,37 @@ 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 {
logrus.Warnf("failed to compute blob (%s) from diff of overlay snapshotter: %+v", sr.ID(), err)
}
if ok {
desc = computed
}
if desc.Digest == "" {
switch sr.cm.ManagerOpt.Snapshotter.Name() {
case "overlayfs", "fuse-overlayfs", "stargz":
if os.Getenv("BUILDKIT_DEBUG_FORCE_OVERLAY_DIFF") == "1" {
// Fallback is disabled. used for testing/debugging.
return nil, errors.Errorf("failed to compute overlay blob (ok=%v): %v", ok, err)
}
// Print warn log if we use the snapshotter expected to succeed overlayfs-based differ
logrus.Warnf("failed to compute overlay blob (ok=%v): %v", ok, err)
}
}
}
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
Loading

0 comments on commit f105370

Please sign in to comment.