From 4bcea74decd64dcbf616f56b47cf8f5b4a2a586f Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Thu, 29 May 2025 15:49:09 -0700 Subject: [PATCH] Update differ selection in transfer service to prefer default Currently the erofs differ will be chosen and cause pulls to fail with not implemented errors. Signed-off-by: Derek McGowan --- plugins/transfer/plugin.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/transfer/plugin.go b/plugins/transfer/plugin.go index 4c61b898b4..c1041e94c6 100644 --- a/plugins/transfer/plugin.go +++ b/plugins/transfer/plugin.go @@ -30,6 +30,7 @@ import ( "github.com/containerd/containerd/v2/core/metadata" "github.com/containerd/containerd/v2/core/transfer/local" "github.com/containerd/containerd/v2/core/unpack" + "github.com/containerd/containerd/v2/defaults" "github.com/containerd/containerd/v2/internal/kmutex" "github.com/containerd/containerd/v2/pkg/imageverifier" "github.com/containerd/containerd/v2/plugins" @@ -115,6 +116,7 @@ func init() { } applier = inst.(diff.Applier) } else { + var applierID string for name, plugin := range ic.GetAll() { if plugin.Registration.Type != plugins.DiffPlugin { continue @@ -129,14 +131,25 @@ func init() { continue } if applier != nil { - log.G(ic.Context).Warnf("multiple differs match for platform, set `differ` option to choose, skipping %q", plugin.Registration.ID) - continue + skippedApplier := plugin.Registration.ID + + // Prefer the default when multiple plugins match + if skippedApplier == defaults.DefaultDiffer { + skippedApplier = applierID + } + + log.G(ic.Context).Warnf("multiple differs match for platform, set `differ` option to choose, skipping %q", skippedApplier) + + if plugin.Registration.ID == skippedApplier { + continue + } } inst, err := plugin.Instance() if err != nil { return nil, fmt.Errorf("failed to get instance for diff plugin %q: %w", name, err) } applier = inst.(diff.Applier) + applierID = plugin.Registration.ID } } if applier == nil {