Try to delete also the metadata of an incomplete layer
Account for the "diff != nil" path; try to remove even the metadata of a layer on a failure saving. Not that there's _much_ hope to be able to save the version without the new layer when we weren't able to save the version with the new layer. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
52a44fbf6d
commit
f3e5d1ff6c
13
layers.go
13
layers.go
|
|
@ -795,6 +795,7 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
|
|||
for flag, value := range flags {
|
||||
layer.Flags[flag] = value
|
||||
}
|
||||
savedIncompleteLayer := false
|
||||
if diff != nil {
|
||||
layer.Flags[incompleteFlag] = true
|
||||
err = r.Save()
|
||||
|
|
@ -806,6 +807,7 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
|
|||
}
|
||||
return nil, -1, err
|
||||
}
|
||||
savedIncompleteLayer = true
|
||||
size, err = r.applyDiffWithOptions(layer.ID, moreOptions, diff)
|
||||
if err != nil {
|
||||
if err2 := r.Delete(layer.ID); err2 != nil {
|
||||
|
|
@ -820,10 +822,19 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
|
|||
}
|
||||
err = r.Save()
|
||||
if err != nil {
|
||||
if savedIncompleteLayer {
|
||||
if err2 := r.Delete(layer.ID); err2 != nil {
|
||||
// Either a driver error or an error saving.
|
||||
// We now have a layer that's been marked for
|
||||
// deletion but which we failed to remove.
|
||||
logrus.Errorf("While recovering from a failure applying layer diff, error deleting layer %#v: %v", layer.ID, err2)
|
||||
}
|
||||
} else {
|
||||
// We don't have a record of this layer, but at least
|
||||
// try to clean it up underneath us.
|
||||
if err2 := r.driver.Remove(id); err2 != nil {
|
||||
logrus.Errorf("While recovering from a failure saving finished layer metadata, error deleting layer %#v: %v", id, err2)
|
||||
logrus.Errorf("While recovering from a failure saving finished layer metadata, error deleting layer %#v in graph driver: %v", id, err2)
|
||||
}
|
||||
}
|
||||
return nil, -1, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue