1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #18203 from aidanhs/aphs-content-addressability-layerstore-releaselayer

Make releaseLayers iterative rather than recursive, remove useless func
This commit is contained in:
Alexander Morozov 2015-11-24 13:41:42 -08:00
commit 5463e26570

View file

@ -328,16 +328,19 @@ func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
return nil
}
func (ls *layerStore) releaseLayers(l *roLayer, removed *[]Metadata, depth int) error {
func (ls *layerStore) releaseLayer(l *roLayer) ([]Metadata, error) {
depth := 0
removed := []Metadata{}
for {
if l.referenceCount == 0 {
panic("layer not retained")
}
l.referenceCount--
if l.referenceCount != 0 {
return nil
return removed, nil
}
if len(*removed) == 0 && depth > 0 {
if len(removed) == 0 && depth > 0 {
panic("cannot remove layer with child")
}
if l.hasReferences() {
@ -345,25 +348,19 @@ func (ls *layerStore) releaseLayers(l *roLayer, removed *[]Metadata, depth int)
}
var metadata Metadata
if err := ls.deleteLayer(l, &metadata); err != nil {
return err
return nil, err
}
delete(ls.layerMap, l.chainID)
*removed = append(*removed, metadata)
removed = append(removed, metadata)
if l.parent != nil {
if err := ls.releaseLayers(l.parent, removed, depth+1); err != nil {
return err
}
if l.parent == nil {
return removed, nil
}
return nil
depth++
l = l.parent
}
func (ls *layerStore) releaseLayer(layer *roLayer) ([]Metadata, error) {
removed := []Metadata{}
err := ls.releaseLayers(layer, &removed, 0)
return removed, err
}
func (ls *layerStore) Release(l Layer) ([]Metadata, error) {