Browse code

Add Map() method to LayerStore interface

This method return a map associating a chain ID to its layer object

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>

Kenfe-Mickael Laventure authored on 2016/08/24 08:08:43
Showing 3 changed files
... ...
@@ -71,6 +71,16 @@ func createChainIDFromParent(parent layer.ChainID, dgsts ...layer.DiffID) layer.
71 71
 	return createChainIDFromParent(layer.ChainID(dgst), dgsts[1:]...)
72 72
 }
73 73
 
74
+func (ls *mockLayerStore) Map() map[layer.ChainID]layer.Layer {
75
+	layers := map[layer.ChainID]layer.Layer{}
76
+
77
+	for k, v := range ls.layers {
78
+		layers[k] = v
79
+	}
80
+
81
+	return layers
82
+}
83
+
74 84
 func (ls *mockLayerStore) Register(reader io.Reader, parentID layer.ChainID) (layer.Layer, error) {
75 85
 	return ls.RegisterWithDescriptor(reader, parentID, distribution.Descriptor{})
76 86
 }
... ...
@@ -170,6 +170,7 @@ type MountInit func(root string) error
170 170
 type Store interface {
171 171
 	Register(io.Reader, ChainID) (Layer, error)
172 172
 	Get(ChainID) (Layer, error)
173
+	Map() map[ChainID]Layer
173 174
 	Release(Layer) ([]Metadata, error)
174 175
 
175 176
 	CreateRWLayer(id string, parent ChainID, mountLabel string, initFunc MountInit, storageOpt map[string]string) (RWLayer, error)
... ...
@@ -360,6 +360,19 @@ func (ls *layerStore) Get(l ChainID) (Layer, error) {
360 360
 	return layer.getReference(), nil
361 361
 }
362 362
 
363
+func (ls *layerStore) Map() map[ChainID]Layer {
364
+	ls.layerL.Lock()
365
+	defer ls.layerL.Unlock()
366
+
367
+	layers := map[ChainID]Layer{}
368
+
369
+	for k, v := range ls.layerMap {
370
+		layers[k] = v
371
+	}
372
+
373
+	return layers
374
+}
375
+
363 376
 func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
364 377
 	err := ls.driver.Remove(layer.cacheID)
365 378
 	if err != nil {