diff --git a/distribution/xfer/download_test.go b/distribution/xfer/download_test.go index a1801eb07c..3558f2af72 100644 --- a/distribution/xfer/download_test.go +++ b/distribution/xfer/download_test.go @@ -71,6 +71,16 @@ func createChainIDFromParent(parent layer.ChainID, dgsts ...layer.DiffID) layer. return createChainIDFromParent(layer.ChainID(dgst), dgsts[1:]...) } +func (ls *mockLayerStore) Map() map[layer.ChainID]layer.Layer { + layers := map[layer.ChainID]layer.Layer{} + + for k, v := range ls.layers { + layers[k] = v + } + + return layers +} + func (ls *mockLayerStore) Register(reader io.Reader, parentID layer.ChainID) (layer.Layer, error) { return ls.RegisterWithDescriptor(reader, parentID, distribution.Descriptor{}) } diff --git a/layer/layer.go b/layer/layer.go index 3881447b64..40e3faa95f 100644 --- a/layer/layer.go +++ b/layer/layer.go @@ -170,6 +170,7 @@ type MountInit func(root string) error type Store interface { Register(io.Reader, ChainID) (Layer, error) Get(ChainID) (Layer, error) + Map() map[ChainID]Layer Release(Layer) ([]Metadata, error) CreateRWLayer(id string, parent ChainID, mountLabel string, initFunc MountInit, storageOpt map[string]string) (RWLayer, error) diff --git a/layer/layer_store.go b/layer/layer_store.go index f6e8db4d97..76b1d8ba20 100644 --- a/layer/layer_store.go +++ b/layer/layer_store.go @@ -360,6 +360,19 @@ func (ls *layerStore) Get(l ChainID) (Layer, error) { return layer.getReference(), nil } +func (ls *layerStore) Map() map[ChainID]Layer { + ls.layerL.Lock() + defer ls.layerL.Unlock() + + layers := map[ChainID]Layer{} + + for k, v := range ls.layerMap { + layers[k] = v + } + + return layers +} + func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error { err := ls.driver.Remove(layer.cacheID) if err != nil {