From fb810b54ff404e81bd2486a944e24583a55fe8bf Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 5 Dec 2013 14:41:56 -0800 Subject: [PATCH] wait on pull from another client --- server.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index deda6fb663..49b25f7098 100644 --- a/server.go +++ b/server.go @@ -877,8 +877,14 @@ func (srv *Server) pullRepository(r *registry.Registry, out io.Writer, localName } // ensure no two downloads of the same image happen at the same time - if _, err := srv.poolAdd("pull", "img:"+img.ID); err != nil { - utils.Errorf("Image (id: %s) pull is already running, skipping: %v", img.ID, err) + if c, err := srv.poolAdd("pull", "img:"+img.ID); err != nil { + if c != nil { + out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Layer already being pulled by another client. Waiting.", nil)) + <-c + out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Download complete", nil)) + } else { + utils.Errorf("Image (id: %s) pull is already running, skipping: %v", img.ID, err) + } if parallel { errors <- nil }