Signed-off-by: Doug MacEachern <dougm@vmware.com>
| ... | ... |
@@ -104,6 +104,20 @@ func (s *TagStore) recursiveLoad(eng *engine.Engine, address, tmpImageDir string |
| 104 | 104 |
log.Debugf("Error validating ID: %s", err)
|
| 105 | 105 |
return err |
| 106 | 106 |
} |
| 107 |
+ |
|
| 108 |
+ // ensure no two downloads of the same layer happen at the same time |
|
| 109 |
+ if c, err := s.poolAdd("pull", "layer:"+img.ID); err != nil {
|
|
| 110 |
+ if c != nil {
|
|
| 111 |
+ log.Debugf("Image (id: %s) load is already running, waiting: %v", img.ID, err)
|
|
| 112 |
+ <-c |
|
| 113 |
+ return nil |
|
| 114 |
+ } |
|
| 115 |
+ |
|
| 116 |
+ return err |
|
| 117 |
+ } |
|
| 118 |
+ |
|
| 119 |
+ defer s.poolRemove("pull", "layer:"+img.ID)
|
|
| 120 |
+ |
|
| 107 | 121 |
if img.Parent != "" {
|
| 108 | 122 |
if !s.graph.Exists(img.Parent) {
|
| 109 | 123 |
if err := s.recursiveLoad(eng, img.Parent, tmpImageDir); err != nil {
|