瀏覽代碼

Fix naivediffdriver timestamp precision bug

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Tonis Tiigi 9 年之前
父節點
當前提交
d1a83059f7
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      daemon/graphdriver/fsdiff.go

+ 7 - 0
daemon/graphdriver/fsdiff.go

@@ -44,6 +44,7 @@ func NewNaiveDiffDriver(driver ProtoDriver, uidMaps, gidMaps []idtools.IDMap) Dr
 // Diff produces an archive of the changes between the specified
 // layer and its parent layer which may be "".
 func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err error) {
+	startTime := time.Now()
 	driver := gdw.ProtoDriver
 
 	layerFs, err := driver.Get(id, "")
@@ -88,6 +89,12 @@ func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err e
 	return ioutils.NewReadCloserWrapper(archive, func() error {
 		err := archive.Close()
 		driver.Put(id)
+
+		// NaiveDiffDriver compares file metadata with parent layers. Parent layers
+		// are extracted from tar's with full second precision on modified time.
+		// We need this hack here to make sure calls within same second receive
+		// correct result.
+		time.Sleep(startTime.Truncate(time.Second).Add(time.Second).Sub(time.Now()))
 		return err
 	}), nil
 }