瀏覽代碼

Merge pull request #10322 from dmcgowan/v2-manifest-tarsum-cache

V2 manifest tarsum cache
Michael Crosby 10 年之前
父節點
當前提交
b3402f34b2
共有 1 個文件被更改,包括 20 次插入16 次删除
  1. 20 16
      graph/manifest.go

+ 20 - 16
graph/manifest.go

@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"io"
 	"io/ioutil"
-	"path"
 
 	log "github.com/Sirupsen/logrus"
 	"github.com/docker/docker/engine"
@@ -93,28 +92,33 @@ func (s *TagStore) newManifest(localName, remoteName, tag string) ([]byte, error
 			}
 		}
 
-		archive, err := layer.TarLayer()
-		if err != nil {
-			return nil, err
+		checksum := layer.Checksum
+		if tarsum.VersionLabelForChecksum(checksum) != tarsum.Version1.String() {
+			archive, err := layer.TarLayer()
+			if err != nil {
+				return nil, err
+			}
+
+			tarSum, err := tarsum.NewTarSum(archive, true, tarsum.Version1)
+			if err != nil {
+				return nil, err
+			}
+			if _, err := io.Copy(ioutil.Discard, tarSum); err != nil {
+				return nil, err
+			}
+
+			checksum = tarSum.Sum(nil)
 		}
 
-		tarSum, err := tarsum.NewTarSum(archive, true, tarsum.Version1)
+		jsonData, err := layer.RawJson()
 		if err != nil {
-			return nil, err
-		}
-		if _, err := io.Copy(ioutil.Discard, tarSum); err != nil {
-			return nil, err
+			return nil, fmt.Errorf("Cannot retrieve the path for {%s}: %s", layer.ID, err)
 		}
 
-		tarId := tarSum.Sum(nil)
-
-		manifest.FSLayers = append(manifest.FSLayers, &registry.FSLayer{BlobSum: tarId})
+		manifest.FSLayers = append(manifest.FSLayers, &registry.FSLayer{BlobSum: checksum})
 
 		layersSeen[layer.ID] = true
-		jsonData, err := ioutil.ReadFile(path.Join(s.graph.Root, layer.ID, "json"))
-		if err != nil {
-			return nil, fmt.Errorf("Cannot retrieve the path for {%s}: %s", layer.ID, err)
-		}
+
 		manifest.History = append(manifest.History, &registry.ManifestHistory{V1Compatibility: string(jsonData)})
 	}