From 1333ef3ca381976438d4ae10f6b0e9be21e1a9ba Mon Sep 17 00:00:00 2001 From: Aaron Lehmann Date: Fri, 17 Jun 2016 22:27:03 -0700 Subject: [PATCH] Fix parallel push of the same image to different registries Layer uploads are deduplicated by a "key" made up of the layer DiffID and the repository name. The repository name being used to form this key was a remote version of the name that didn't include the name of the registry. Consequently, pushes of the same layer in a repository with the same remote name to different registries would wrongly be deduplicated. Correct the key by using the full name of the repository, which includes the registry hostname as well as the image's name. Signed-off-by: Aaron Lehmann --- distribution/push_v2.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/distribution/push_v2.go b/distribution/push_v2.go index 6bd5c5a831..0bb0a1de30 100644 --- a/distribution/push_v2.go +++ b/distribution/push_v2.go @@ -137,6 +137,7 @@ func (p *v2Pusher) pushV2Tag(ctx context.Context, ref reference.NamedTagged, ima descriptorTemplate := v2PushDescriptor{ v2MetadataService: p.v2MetadataService, repoInfo: p.repoInfo, + ref: p.ref, repo: p.repo, pushState: &p.pushState, } @@ -222,13 +223,14 @@ type v2PushDescriptor struct { layer layer.Layer v2MetadataService *metadata.V2MetadataService repoInfo reference.Named + ref reference.Named repo distribution.Repository pushState *pushState remoteDescriptor distribution.Descriptor } func (pd *v2PushDescriptor) Key() string { - return "v2push:" + pd.repo.Named().Name() + " " + pd.layer.DiffID().String() + return "v2push:" + pd.ref.FullName() + " " + pd.layer.DiffID().String() } func (pd *v2PushDescriptor) ID() string {