@@ -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 ()
@@ -387,6 +396,7 @@ func (r *Resolver) resolveBlob(ctx context.Context, hosts []docker.RegistryHost,
387396func newLayer (
388397 resolver * Resolver ,
389398 desc ocispec.Descriptor ,
399+ cacheRefKey string ,
390400 blob * blobRef ,
391401 r reader.Reader ,
392402 bgResolver backgroundfetcher.Resolver ,
@@ -396,6 +406,7 @@ func newLayer(
396406 return & layer {
397407 resolver : resolver ,
398408 desc : desc ,
409+ cacheRefKey : cacheRefKey ,
399410 blob : blob ,
400411 r : r ,
401412 bgResolver : bgResolver ,
@@ -405,9 +416,10 @@ func newLayer(
405416}
406417
407418type layer struct {
408- resolver * Resolver
409- desc ocispec.Descriptor
410- blob * blobRef
419+ resolver * Resolver
420+ desc ocispec.Descriptor
421+ cacheRefKey string
422+ blob * blobRef
411423
412424 bgResolver backgroundfetcher.Resolver
413425
@@ -420,6 +432,10 @@ type layer struct {
420432 closedMu sync.Mutex
421433}
422434
435+ func (l * layer ) GetCacheRefKey () string {
436+ return l .cacheRefKey
437+ }
438+
423439func (l * layer ) Info () Info {
424440 return Info {
425441 Digest : l .desc .Digest ,
0 commit comments