Преглед на файлове

images: assurance and debug info on image layers

when pushing or saving layers, report sizes for validation. And ensure
that the files written are sync'ed.

Docker-DCO-1.1-Signed-off-by: Vincent Batts <vbatts@redhat.com> (github: vbatts)
Vincent Batts преди 11 години
родител
ревизия
367a679b92
променени са 2 файла, в които са добавени 12 реда и са изтрити 2 реда
  1. 3 0
      archive/archive.go
  2. 9 2
      server/server.go

+ 3 - 0
archive/archive.go

@@ -617,6 +617,9 @@ func NewTempArchive(src Archive, dir string) (*TempArchive, error) {
 	if _, err := io.Copy(f, src); err != nil {
 	if _, err := io.Copy(f, src); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
+	if err = f.Sync(); err != nil {
+		return nil, err
+	}
 	if _, err := f.Seek(0, 0); err != nil {
 	if _, err := f.Seek(0, 0); err != nil {
 		return nil, err
 		return nil, err
 	}
 	}

+ 9 - 2
server/server.go

@@ -378,10 +378,15 @@ func (srv *Server) exportImage(img *image.Image, tempdir string) error {
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
-		if _, err = io.Copy(fsTar, fs); err != nil {
+		if written, err := io.Copy(fsTar, fs); err != nil {
+			return err
+		} else {
+			utils.Debugf("rendered layer for %s of [%d] size", i.ID, written)
+		}
+
+		if err = fsTar.Close(); err != nil {
 			return err
 			return err
 		}
 		}
-		fsTar.Close()
 
 
 		// find parent
 		// find parent
 		if i.Parent != "" {
 		if i.Parent != "" {
@@ -1537,6 +1542,8 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgID,
 	defer os.RemoveAll(layerData.Name())
 	defer os.RemoveAll(layerData.Name())
 
 
 	// Send the layer
 	// Send the layer
+	utils.Debugf("rendered layer for %s of [%d] size", imgData.ID, layerData.Size)
+
 	checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing"), ep, token, jsonRaw)
 	checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing"), ep, token, jsonRaw)
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err