From 2bc9f49ffdcd8ee348917c7e625159dca7d129f9 Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Fri, 4 May 2018 14:31:27 -0700 Subject: [PATCH] Retry image creation after update not found Signed-off-by: Derek McGowan --- client.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/client.go b/client.go index 340e41efc..6163a611b 100644 --- a/client.go +++ b/client.go @@ -345,19 +345,26 @@ func (c *Client) Pull(ctx context.Context, ref string, opts ...RemoteOpt) (Image } is := c.ImageService() - if created, err := is.Create(ctx, imgrec); err != nil { - if !errdefs.IsAlreadyExists(err) { - return nil, err - } + for { + if created, err := is.Create(ctx, imgrec); err != nil { + if !errdefs.IsAlreadyExists(err) { + return nil, err + } - updated, err := is.Update(ctx, imgrec) - if err != nil { - return nil, err - } + updated, err := is.Update(ctx, imgrec) + if err != nil { + // if image was removed, try create again + if errdefs.IsNotFound(err) { + continue + } + return nil, err + } - imgrec = updated - } else { - imgrec = created + imgrec = updated + } else { + imgrec = created + } + break } img := &image{