Skip to content

Commit e5223bf

Browse files
committed
exporter: unlazy references in parallel
Signed-off-by: Justin Chadwell <[email protected]>
1 parent cd02ea8 commit e5223bf

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

exporter/containerimage/export.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/opencontainers/image-spec/identity"
3232
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
3333
"github.com/pkg/errors"
34+
"golang.org/x/sync/errgroup"
3435
)
3536

3637
const (
@@ -284,17 +285,25 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source
284285
for _, ref := range src.Refs {
285286
refs = append(refs, ref)
286287
}
288+
eg, ctx := errgroup.WithContext(ctx)
287289
for _, ref := range refs {
288-
remotes, err := ref.GetRemotes(ctx, false, e.opts.RefCfg, false, session.NewGroup(sessionID))
289-
if err != nil {
290-
return nil, nil, err
291-
}
292-
remote := remotes[0]
293-
if unlazier, ok := remote.Provider.(cache.Unlazier); ok {
294-
if err := unlazier.Unlazy(ctx); err != nil {
295-
return nil, nil, err
290+
ref := ref
291+
eg.Go(func() error {
292+
remotes, err := ref.GetRemotes(ctx, false, e.opts.RefCfg, false, session.NewGroup(sessionID))
293+
if err != nil {
294+
return err
296295
}
297-
}
296+
remote := remotes[0]
297+
if unlazier, ok := remote.Provider.(cache.Unlazier); ok {
298+
if err := unlazier.Unlazy(ctx); err != nil {
299+
return err
300+
}
301+
}
302+
return nil
303+
})
304+
}
305+
if err := eg.Wait(); err != nil {
306+
return nil, nil, err
298307
}
299308
}
300309
}

exporter/oci/export.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/moby/buildkit/util/progress"
2828
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
2929
"github.com/pkg/errors"
30+
"golang.org/x/sync/errgroup"
3031
"google.golang.org/grpc/codes"
3132
)
3233

@@ -212,21 +213,29 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source
212213
for _, ref := range src.Refs {
213214
refs = append(refs, ref)
214215
}
216+
eg, egCtx := errgroup.WithContext(ctx)
215217
mprovider := contentutil.NewMultiProvider(e.opt.ImageWriter.ContentStore())
216218
for _, ref := range refs {
217-
remotes, err := ref.GetRemotes(ctx, false, e.opts.RefCfg, false, session.NewGroup(sessionID))
218-
if err != nil {
219-
return nil, nil, err
220-
}
221-
remote := remotes[0]
222-
if unlazier, ok := remote.Provider.(cache.Unlazier); ok {
223-
if err := unlazier.Unlazy(ctx); err != nil {
224-
return nil, nil, err
219+
ref := ref
220+
eg.Go(func() error {
221+
remotes, err := ref.GetRemotes(egCtx, false, e.opts.RefCfg, false, session.NewGroup(sessionID))
222+
if err != nil {
223+
return err
225224
}
226-
}
227-
for _, desc := range remote.Descriptors {
228-
mprovider.Add(desc.Digest, remote.Provider)
229-
}
225+
remote := remotes[0]
226+
if unlazier, ok := remote.Provider.(cache.Unlazier); ok {
227+
if err := unlazier.Unlazy(egCtx); err != nil {
228+
return err
229+
}
230+
}
231+
for _, desc := range remote.Descriptors {
232+
mprovider.Add(desc.Digest, remote.Provider)
233+
}
234+
return nil
235+
})
236+
}
237+
if err := eg.Wait(); err != nil {
238+
return nil, nil, err
230239
}
231240

232241
if e.tar {

0 commit comments

Comments
 (0)