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