Browse Source

Merge pull request #10888 from dougm/parallel-load

Avoid parallel layer downloads in load command
Alexander Morozov 10 years ago
parent
commit
15bf67a998
1 changed files with 14 additions and 0 deletions
  1. 14 0
      graph/load.go

+ 14 - 0
graph/load.go

@@ -104,6 +104,20 @@ func (s *TagStore) recursiveLoad(eng *engine.Engine, address, tmpImageDir string
 			log.Debugf("Error validating ID: %s", err)
 			return err
 		}
+
+		// ensure no two downloads of the same layer happen at the same time
+		if c, err := s.poolAdd("pull", "layer:"+img.ID); err != nil {
+			if c != nil {
+				log.Debugf("Image (id: %s) load is already running, waiting: %v", img.ID, err)
+				<-c
+				return nil
+			}
+
+			return err
+		}
+
+		defer s.poolRemove("pull", "layer:"+img.ID)
+
 		if img.Parent != "" {
 			if !s.graph.Exists(img.Parent) {
 				if err := s.recursiveLoad(eng, img.Parent, tmpImageDir); err != nil {