@@ -104,6 +104,9 @@ type Layer interface {
104104 // Done releases the reference to this layer. The resources related to this layer will be
105105 // discarded sooner or later. Queries after calling this function won't be serviced.
106106 Done ()
107+
108+ // GetCacheRefKey returns the reference key for the cache used by the layer
109+ GetCacheRefKey () string
107110}
108111
109112// Info is the current status of a layer.
@@ -226,6 +229,12 @@ func newCache(root string, cacheType string, cfg config.FSConfig) (cache.BlobCac
226229 )
227230}
228231
232+ func (r * Resolver ) Evict (name string ) {
233+ r .layerCacheMu .Lock ()
234+ r .layerCache .Remove (name )
235+ r .layerCacheMu .Unlock ()
236+ }
237+
229238// Resolve resolves a layer based on the passed layer blob information.
230239func (r * Resolver ) Resolve (ctx context.Context , hosts []docker.RegistryHost , refspec reference.Spec , desc , sociDesc ocispec.Descriptor , opCounter * FuseOperationCounter , disableVerification bool , metadataOpts ... metadata.Option ) (_ Layer , retErr error ) {
231240 name := refspec .String () + "/" + desc .Digest .String ()
@@ -339,7 +348,7 @@ func (r *Resolver) Resolve(ctx context.Context, hosts []docker.RegistryHost, ref
339348 }
340349 disableXAttrs := getDisableXAttrAnnotation (sociDesc )
341350 // Combine layer information together and cache it.
342- l := newLayer (r , desc , blobR , vr , bgLayerResolver , opCounter , disableXAttrs )
351+ l := newLayer (r , desc , name , blobR , vr , bgLayerResolver , opCounter , disableXAttrs )
343352 r .layerCacheMu .Lock ()
344353 cachedL , done2 , added := r .layerCache .Add (name , l )
345354 r .layerCacheMu .Unlock ()
@@ -370,18 +379,8 @@ func (r *Resolver) resolveBlob(ctx context.Context, hosts []docker.RegistryHost,
370379 r .blobCacheMu .Unlock ()
371380 }
372381
373- httpCache , err := newCache (filepath .Join (r .rootDir , "httpcache" ), r .config .HTTPCacheType , r .config )
374- if err != nil {
375- return nil , fmt .Errorf ("failed to create http cache: %w" , err )
376- }
377- defer func () {
378- if retErr != nil {
379- httpCache .Close ()
380- }
381- }()
382-
383382 // Resolve the blob and cache the result.
384- b , err := r .resolver .Resolve (ctx , hosts , refspec , desc , httpCache )
383+ b , err := r .resolver .Resolve (ctx , hosts , refspec , desc )
385384 if err != nil {
386385 return nil , fmt .Errorf ("failed to resolve the source: %w" , err )
387386 }
@@ -397,6 +396,7 @@ func (r *Resolver) resolveBlob(ctx context.Context, hosts []docker.RegistryHost,
397396func newLayer (
398397 resolver * Resolver ,
399398 desc ocispec.Descriptor ,
399+ cacheRefKey string ,
400400 blob * blobRef ,
401401 r reader.Reader ,
402402 bgResolver backgroundfetcher.Resolver ,
@@ -406,6 +406,7 @@ func newLayer(
406406 return & layer {
407407 resolver : resolver ,
408408 desc : desc ,
409+ cacheRefKey : cacheRefKey ,
409410 blob : blob ,
410411 r : r ,
411412 bgResolver : bgResolver ,
@@ -415,9 +416,10 @@ func newLayer(
415416}
416417
417418type layer struct {
418- resolver * Resolver
419- desc ocispec.Descriptor
420- blob * blobRef
419+ resolver * Resolver
420+ desc ocispec.Descriptor
421+ cacheRefKey string
422+ blob * blobRef
421423
422424 bgResolver backgroundfetcher.Resolver
423425
@@ -430,6 +432,10 @@ type layer struct {
430432 closedMu sync.Mutex
431433}
432434
435+ func (l * layer ) GetCacheRefKey () string {
436+ return l .cacheRefKey
437+ }
438+
433439func (l * layer ) Info () Info {
434440 return Info {
435441 Digest : l .desc .Digest ,
0 commit comments