Skip to content

Commit 62af107

Browse files
author
Kazuyoshi Kato
authored
Merge pull request #10233 from dmcgowan/1.7-unpack-fetch-all
[release/1.7] Unpack fetch all
2 parents a3c0f2f + 1573ea5 commit 62af107

2 files changed

Lines changed: 26 additions & 17 deletions

File tree

cmd/ctr/commands/images/pull.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,24 +100,25 @@ command. As part of this process, we do the following:
100100
}
101101

102102
var sopts []image.StoreOpt
103-
if !context.Bool("all-platforms") {
104-
var p []ocispec.Platform
105-
for _, s := range context.StringSlice("platform") {
106-
ps, err := platforms.Parse(s)
107-
if err != nil {
108-
return fmt.Errorf("unable to parse platform %s: %w", s, err)
109-
}
110-
p = append(p, ps)
103+
104+
var p []ocispec.Platform
105+
for _, s := range context.StringSlice("platform") {
106+
ps, err := platforms.Parse(s)
107+
if err != nil {
108+
return fmt.Errorf("unable to parse platform %s: %w", s, err)
111109
}
110+
p = append(p, ps)
111+
}
112+
113+
// Set unpack configuration
114+
for _, platform := range p {
115+
sopts = append(sopts, image.WithUnpack(platform, context.String("snapshotter")))
116+
}
117+
if !context.Bool("all-platforms") {
112118
if len(p) == 0 {
113119
p = append(p, platforms.DefaultSpec())
114120
}
115121
sopts = append(sopts, image.WithPlatforms(p...))
116-
117-
// Set unpack configuration
118-
for _, platform := range p {
119-
sopts = append(sopts, image.WithUnpack(platform, context.String("snapshotter")))
120-
}
121122
}
122123
// TODO: Support unpack for all platforms..?
123124
// Pass in a *?

pkg/unpack/unpacker.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ func (u *Unpacker) unpack(
263263
}
264264

265265
if unpack == nil {
266-
return fmt.Errorf("unpacker does not support platform %s for image %s", imgPlatform, config.Digest)
266+
log.G(ctx).WithField("image", config.Digest).WithField("platform", platforms.Format(imgPlatform)).Debugf("unpacker does not support platform, only fetching layers")
267+
return u.fetch(ctx, h, layers, nil)
267268
}
268269

269270
atomic.AddInt32(&u.unpacks, 1)
@@ -461,12 +462,18 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
461462
tracing.Attribute("layer.media.digest", desc.Digest.String()),
462463
)
463464
desc := desc
464-
i := i
465+
var ch chan struct{}
466+
if done != nil {
467+
ch = done[i]
468+
}
469+
465470
if err := u.acquire(ctx); err != nil {
466471
return err
467472
}
468473

469474
eg.Go(func() error {
475+
defer layerSpan.End()
476+
470477
unlock, err := u.lockBlobDescriptor(ctx2, desc)
471478
if err != nil {
472479
u.release()
@@ -481,11 +488,12 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
481488
if err != nil && !errors.Is(err, images.ErrSkipDesc) {
482489
return err
483490
}
484-
close(done[i])
491+
if ch != nil {
492+
close(ch)
493+
}
485494

486495
return nil
487496
})
488-
layerSpan.End()
489497
}
490498

491499
return eg.Wait()

0 commit comments

Comments
 (0)