mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #42035 from tonistiigi/builder-pull-fix
This commit is contained in:
commit
bc6f4cc703
1 changed files with 11 additions and 5 deletions
|
@ -183,6 +183,7 @@ func (is *Source) Resolve(ctx context.Context, id source.Identifier, sm *session
|
||||||
type puller struct {
|
type puller struct {
|
||||||
is *Source
|
is *Source
|
||||||
resolveLocalOnce sync.Once
|
resolveLocalOnce sync.Once
|
||||||
|
g flightcontrol.Group
|
||||||
src *source.ImageIdentifier
|
src *source.ImageIdentifier
|
||||||
desc ocispec.Descriptor
|
desc ocispec.Descriptor
|
||||||
ref string
|
ref string
|
||||||
|
@ -253,9 +254,7 @@ func (p *puller) resolveLocal() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *puller) resolve(ctx context.Context, g session.Group) error {
|
func (p *puller) resolve(ctx context.Context, g session.Group) error {
|
||||||
// key is used to synchronize resolutions that can happen in parallel when doing multi-stage.
|
_, err := p.g.Do(ctx, "", func(ctx context.Context) (_ interface{}, err error) {
|
||||||
key := "resolve::" + p.ref + "::" + platforms.Format(p.platform)
|
|
||||||
_, err := p.is.g.Do(ctx, key, func(ctx context.Context) (_ interface{}, err error) {
|
|
||||||
resolveProgressDone := oneOffProgress(ctx, "resolve "+p.src.Reference.String())
|
resolveProgressDone := oneOffProgress(ctx, "resolve "+p.src.Reference.String())
|
||||||
defer func() {
|
defer func() {
|
||||||
resolveProgressDone(err)
|
resolveProgressDone(err)
|
||||||
|
@ -329,6 +328,10 @@ func (p *puller) CacheKey(ctx context.Context, g session.Group, index int) (stri
|
||||||
return dgst.String(), nil, false, nil
|
return dgst.String(), nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(p.config) == 0 {
|
||||||
|
return "", nil, false, errors.Errorf("invalid empty config file resolved for %s", p.src.Reference.String())
|
||||||
|
}
|
||||||
|
|
||||||
k := cacheKeyFromConfig(p.config).String()
|
k := cacheKeyFromConfig(p.config).String()
|
||||||
if k == "" {
|
if k == "" {
|
||||||
dgst, err := p.mainManifestKey(p.platform)
|
dgst, err := p.mainManifestKey(p.platform)
|
||||||
|
@ -360,8 +363,10 @@ func (p *puller) getRef(ctx context.Context, diffIDs []layer.DiffID, opts ...cac
|
||||||
|
|
||||||
func (p *puller) Snapshot(ctx context.Context, g session.Group) (cache.ImmutableRef, error) {
|
func (p *puller) Snapshot(ctx context.Context, g session.Group) (cache.ImmutableRef, error) {
|
||||||
p.resolveLocal()
|
p.resolveLocal()
|
||||||
if err := p.resolve(ctx, g); err != nil {
|
if len(p.config) == 0 {
|
||||||
return nil, err
|
if err := p.resolve(ctx, g); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config != nil {
|
if p.config != nil {
|
||||||
|
@ -801,6 +806,7 @@ func cacheKeyFromConfig(dt []byte) digest.Digest {
|
||||||
var img ocispec.Image
|
var img ocispec.Image
|
||||||
err := json.Unmarshal(dt, &img)
|
err := json.Unmarshal(dt, &img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
logrus.WithError(err).Errorf("failed to unmarshal image config for cache key %v", err)
|
||||||
return digest.FromBytes(dt)
|
return digest.FromBytes(dt)
|
||||||
}
|
}
|
||||||
if img.RootFS.Type != "layers" || len(img.RootFS.DiffIDs) == 0 {
|
if img.RootFS.Type != "layers" || len(img.RootFS.DiffIDs) == 0 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue