mirror of https://github.com/docker/docs.git
Make releaseLayers iterative rather than recursive, remove useless func
Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
This commit is contained in:
parent
a2ab05098d
commit
a4d768538a
|
@ -328,16 +328,19 @@ func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
|
||||||
return nil
|
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 {
|
if l.referenceCount == 0 {
|
||||||
panic("layer not retained")
|
panic("layer not retained")
|
||||||
}
|
}
|
||||||
l.referenceCount--
|
l.referenceCount--
|
||||||
if l.referenceCount != 0 {
|
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")
|
panic("cannot remove layer with child")
|
||||||
}
|
}
|
||||||
if l.hasReferences() {
|
if l.hasReferences() {
|
||||||
|
@ -345,25 +348,19 @@ func (ls *layerStore) releaseLayers(l *roLayer, removed *[]Metadata, depth int)
|
||||||
}
|
}
|
||||||
var metadata Metadata
|
var metadata Metadata
|
||||||
if err := ls.deleteLayer(l, &metadata); err != nil {
|
if err := ls.deleteLayer(l, &metadata); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
delete(ls.layerMap, l.chainID)
|
delete(ls.layerMap, l.chainID)
|
||||||
*removed = append(*removed, metadata)
|
removed = append(removed, metadata)
|
||||||
|
|
||||||
if l.parent != nil {
|
if l.parent == nil {
|
||||||
if err := ls.releaseLayers(l.parent, removed, depth+1); err != nil {
|
return removed, nil
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
func (ls *layerStore) Release(l Layer) ([]Metadata, error) {
|
||||||
|
|
Loading…
Reference in New Issue