@@ -161,6 +161,7 @@ func getImageForName(imageName string) (pkgutil.Image, error) {
161
161
}
162
162
elapsed := time .Now ().Sub (start )
163
163
logrus .Infof ("retrieving image from daemon took %f seconds" , elapsed .Seconds ())
164
+ noCache = true // force noCache if we have daemon image. TODO(nkubala): remove this
164
165
} else {
165
166
// either has remote prefix or has no prefix, in which case we force remote
166
167
imageName = strings .Replace (imageName , RemotePrefix , "" , - 1 )
@@ -191,9 +192,8 @@ func getImageForName(imageName string) (pkgutil.Image, error) {
191
192
}
192
193
for _ , layer := range imgLayers {
193
194
layerStart := time .Now ()
194
- diffID , err := layer .DiffID ()
195
- logrus .Infof ("layer digest: %s" , diffID .String ())
196
- path , err := getExtractPathForName (diffID .String ())
195
+ digest , err := layer .Digest ()
196
+ path , err := getExtractPathForName (digest .String ())
197
197
if err != nil {
198
198
return pkgutil.Image {
199
199
Layers : layers ,
@@ -214,7 +214,7 @@ func getImageForName(imageName string) (pkgutil.Image, error) {
214
214
logrus .Infof ("time elapsed retrieving image layers: %fs" , elapsed .Seconds ())
215
215
}
216
216
217
- path , err := getExtractPathForName (imageName )
217
+ path , err := getExtractPathForImage (imageName , img )
218
218
// extract fs into provided dir
219
219
if err := pkgutil .GetFileSystemForImage (img , path , nil ); err != nil {
220
220
return pkgutil.Image {
@@ -230,6 +230,20 @@ func getImageForName(imageName string) (pkgutil.Image, error) {
230
230
}, nil
231
231
}
232
232
233
+ func getExtractPathForImage (imageName string , image v1.Image ) (string , error ) {
234
+ if noCache {
235
+ return getExtractPathForName (imageName )
236
+ }
237
+ start := time .Now ()
238
+ digest , err := image .Digest ()
239
+ if err != nil {
240
+ return "" , err
241
+ }
242
+ elapsed := time .Now ().Sub (start )
243
+ logrus .Infof ("time elapsed retrieving image digest: %fs" , elapsed .Seconds ())
244
+ return getExtractPathForName (pkgutil .RemoveTag (imageName ) + "@" + digest .String ())
245
+ }
246
+
233
247
func getExtractPathForName (name string ) (string , error ) {
234
248
var path string
235
249
var err error
@@ -244,10 +258,11 @@ func getExtractPathForName(name string) (string, error) {
244
258
if err != nil {
245
259
return "" , err
246
260
}
247
- logrus .Infof ("Image fs cached at %s" , path )
261
+ logrus .Infof ("caching filesystem at %s" , path )
248
262
}
249
263
} else {
250
264
// otherwise, create tempdir
265
+ logrus .Infof ("skipping caching" )
251
266
path , err = ioutil .TempDir ("" , strings .Replace (name , "/" , "" , - 1 ))
252
267
if err != nil {
253
268
return "" , err
0 commit comments