Update unpacker to always fetch all
When a set of layers are provided to the unpacker, then the unpacker should still fetch them regardless of whether they will be used for unpack. The image handler filters are responsible for removing content which is not intended to be fetched. Currently there is no way to use an unpacker and also fetch all platforms. Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
parent
2788604e49
commit
681a083fab
@ -262,7 +262,8 @@ func (u *Unpacker) unpack(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if unpack == nil {
|
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)
|
atomic.AddInt32(&u.unpacks, 1)
|
||||||
@ -460,12 +461,18 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
|
|||||||
tracing.Attribute("layer.media.digest", desc.Digest.String()),
|
tracing.Attribute("layer.media.digest", desc.Digest.String()),
|
||||||
)
|
)
|
||||||
desc := desc
|
desc := desc
|
||||||
i := i
|
var ch chan struct{}
|
||||||
|
if done != nil {
|
||||||
|
ch = done[i]
|
||||||
|
}
|
||||||
|
|
||||||
if err := u.acquire(ctx); err != nil {
|
if err := u.acquire(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
|
defer layerSpan.End()
|
||||||
|
|
||||||
unlock, err := u.lockBlobDescriptor(ctx2, desc)
|
unlock, err := u.lockBlobDescriptor(ctx2, desc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
u.release()
|
u.release()
|
||||||
@ -480,11 +487,12 @@ func (u *Unpacker) fetch(ctx context.Context, h images.Handler, layers []ocispec
|
|||||||
if err != nil && !errors.Is(err, images.ErrSkipDesc) {
|
if err != nil && !errors.Is(err, images.ErrSkipDesc) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
close(done[i])
|
if ch != nil {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
layerSpan.End()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return eg.Wait()
|
return eg.Wait()
|
||||||
|
Loading…
Reference in New Issue
Block a user