Merge pull request #3510 from tonistiigi/fix-mediatype-concurrency
imagetools: fix concurrent map write from containerd issue
This commit is contained in:
@@ -168,11 +168,6 @@ func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, arg
|
||||
return errors.Wrapf(err, "failed to parse annotations")
|
||||
}
|
||||
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.oci.empty.v1+json", "empty")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.cosign.artifact.sig.v1+json", "cosign")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.cosign.simplesigning.v1+json", "simplesigning")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.sigstore.bundle.v0.3+json", "sigstore-bundle")
|
||||
|
||||
dt, desc, manifests, err := r.Combine(ctx, srcs, annotations, in.preferIndex, platforms)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -208,9 +203,11 @@ func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, arg
|
||||
for _, t := range tags {
|
||||
eg.Go(func() error {
|
||||
return progress.Wrap(fmt.Sprintf("pushing %s", t.String()), pw.Write, func(sub progress.SubLogger) error {
|
||||
baseCtx := ctx
|
||||
eg2, _ := errgroup.WithContext(ctx)
|
||||
for _, desc := range manifests {
|
||||
eg2.Go(func() error {
|
||||
ctx = withMediaTypeKeyPrefix(baseCtx)
|
||||
sub.Log(1, fmt.Appendf(nil, "copying %s from %s to %s\n", desc.Digest.String(), desc.Source.Ref.String(), t.String()))
|
||||
return r.Copy(ctx, desc.Source, t)
|
||||
})
|
||||
@@ -218,6 +215,7 @@ func runCreate(ctx context.Context, dockerCli command.Cli, in createOptions, arg
|
||||
if err := eg2.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
ctx = withMediaTypeKeyPrefix(ctx) // because of containerd bug this needs to be called separately for each ctx/goroutine pair to avoid concurrent map write
|
||||
sub.Log(1, fmt.Appendf(nil, "pushing %s to %s\n", desc.Digest.String(), t.String()))
|
||||
return r.Push(ctx, t, desc, dt)
|
||||
})
|
||||
@@ -265,6 +263,14 @@ func parsePlatforms(in []string) ([]ocispecs.Platform, error) {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func withMediaTypeKeyPrefix(ctx context.Context) context.Context {
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.oci.empty.v1+json", "empty")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.cosign.artifact.sig.v1+json", "cosign")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.cosign.simplesigning.v1+json", "simplesigning")
|
||||
ctx = remotes.WithMediaTypeKeyPrefix(ctx, "application/vnd.dev.sigstore.bundle.v0.3+json", "sigstore-bundle")
|
||||
return ctx
|
||||
}
|
||||
|
||||
func parseRefs(in []string) ([]reference.Named, error) {
|
||||
refs := make([]reference.Named, len(in))
|
||||
for i, in := range in {
|
||||
|
||||
Reference in New Issue
Block a user