Skip to content

Commit 9836771

Browse files
authored
Merge pull request #6477 from tonistiigi/fix-image-update
containerimage: fix possible race on parallel image create
2 parents f94176b + 8349e9c commit 9836771

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

exporter/containerimage/export.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,20 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source
298298
}
299299
for _, sfx := range sfx {
300300
img.Name = targetName + sfx
301-
if _, err := e.opt.Images.Update(imageClientCtx, img); err != nil {
302-
if !errors.Is(err, cerrdefs.ErrNotFound) {
303-
return nil, nil, nil, tagDone(err)
304-
}
301+
for { // handle possible race between Update and Create
302+
if _, err := e.opt.Images.Update(imageClientCtx, img); err != nil {
303+
if !errors.Is(err, cerrdefs.ErrNotFound) {
304+
return nil, nil, nil, tagDone(err)
305+
}
305306

306-
if _, err := e.opt.Images.Create(imageClientCtx, img); err != nil {
307-
return nil, nil, nil, tagDone(err)
307+
if _, err := e.opt.Images.Create(imageClientCtx, img); err != nil {
308+
if !errors.Is(err, cerrdefs.ErrAlreadyExists) {
309+
return nil, nil, nil, tagDone(err)
310+
}
311+
continue
312+
}
308313
}
314+
break
309315
}
310316
}
311317
tagDone(nil)

0 commit comments

Comments
 (0)