Skip to content

Commit

Permalink
Merge pull request #10202 from dmcgowan/unpack-fetch-all
Browse files Browse the repository at this point in the history
Unpack fetch all
  • Loading branch information
mxpv committed May 11, 2024
2 parents 76895c4 + 681a083 commit 29a6ab8
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
18 changes: 9 additions & 9 deletions cmd/ctr/commands/images/pull.go
Expand Up @@ -106,20 +106,20 @@ command. As part of this process, we do the following:
}

var sopts []image.StoreOpt
p, err := platforms.ParseAll(context.StringSlice("platform"))
if err != nil {
return err
}

// Set unpack configuration
for _, platform := range p {
sopts = append(sopts, image.WithUnpack(platform, context.String("snapshotter")))
}
if !context.Bool("all-platforms") {
p, err := platforms.ParseAll(context.StringSlice("platform"))
if err != nil {
return err
}
if len(p) == 0 {
p = append(p, platforms.DefaultSpec())
}
sopts = append(sopts, image.WithPlatforms(p...))

// Set unpack configuration
for _, platform := range p {
sopts = append(sopts, image.WithUnpack(platform, context.String("snapshotter")))
}
}
// TODO: Support unpack for all platforms..?
// Pass in a *?
Expand Down
16 changes: 12 additions & 4 deletions core/unpack/unpacker.go
Expand Up @@ -262,7 +262,8 @@ func (u *Unpacker) unpack(
}

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

atomic.AddInt32(&u.unpacks, 1)
Expand Down Expand Up @@ -460,12 +461,18 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
tracing.Attribute("layer.media.digest", desc.Digest.String()),
)
desc := desc
i := i
var ch chan struct{}
if done != nil {
ch = done[i]
}

if err := u.acquire(ctx); err != nil {
return err
}

eg.Go(func() error {
defer layerSpan.End()

unlock, err := u.lockBlobDescriptor(ctx2, desc)
if err != nil {
u.release()
Expand All @@ -480,11 +487,12 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
if err != nil && !errors.Is(err, images.ErrSkipDesc) {
return err
}
close(done[i])
if ch != nil {
close(ch)
}

return nil
})
layerSpan.End()
}

return eg.Wait()
Expand Down

0 comments on commit 29a6ab8

Please sign in to comment.