Browse code

Fix naivediffdriver timestamp precision bug

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>

Tonis Tiigi authored on 2016/03/31 08:16:37
Showing 1 changed files
... ...
@@ -44,6 +44,7 @@ func NewNaiveDiffDriver(driver ProtoDriver, uidMaps, gidMaps []idtools.IDMap) Dr
44 44
 // Diff produces an archive of the changes between the specified
45 45
 // layer and its parent layer which may be "".
46 46
 func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err error) {
47
+	startTime := time.Now()
47 48
 	driver := gdw.ProtoDriver
48 49
 
49 50
 	layerFs, err := driver.Get(id, "")
... ...
@@ -88,6 +89,12 @@ func (gdw *NaiveDiffDriver) Diff(id, parent string) (arch archive.Archive, err e
88 88
 	return ioutils.NewReadCloserWrapper(archive, func() error {
89 89
 		err := archive.Close()
90 90
 		driver.Put(id)
91
+
92
+		// NaiveDiffDriver compares file metadata with parent layers. Parent layers
93
+		// are extracted from tar's with full second precision on modified time.
94
+		// We need this hack here to make sure calls within same second receive
95
+		// correct result.
96
+		time.Sleep(startTime.Truncate(time.Second).Add(time.Second).Sub(time.Now()))
91 97
 		return err
92 98
 	}), nil
93 99
 }