Fix a race condition in TestInterruptedRegister
This commit is contained in:
parent
a937313747
commit
02cb7f45fa
1 changed files with 15 additions and 1 deletions
16
graph.go
16
graph.go
|
@ -131,7 +131,15 @@ func (graph *Graph) Create(layerData archive.Archive, container *Container, comm
|
||||||
|
|
||||||
// Register imports a pre-existing image into the graph.
|
// Register imports a pre-existing image into the graph.
|
||||||
// FIXME: pass img as first argument
|
// FIXME: pass img as first argument
|
||||||
func (graph *Graph) Register(jsonData []byte, layerData archive.Archive, img *Image) error {
|
func (graph *Graph) Register(jsonData []byte, layerData archive.Archive, img *Image) (err error) {
|
||||||
|
defer func() {
|
||||||
|
// If any error occurs, remove the new dir from the driver.
|
||||||
|
// Don't check for errors since the dir might not have been created.
|
||||||
|
// FIXME: this leaves a possible race condition.
|
||||||
|
if err != nil {
|
||||||
|
graph.driver.Remove(img.ID)
|
||||||
|
}
|
||||||
|
}()
|
||||||
if err := ValidateID(img.ID); err != nil {
|
if err := ValidateID(img.ID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -147,6 +155,12 @@ func (graph *Graph) Register(jsonData []byte, layerData archive.Archive, img *Im
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the driver has this ID but the graph doesn't, remove it from the driver to start fresh.
|
||||||
|
// (the graph is the source of truth).
|
||||||
|
// Ignore errors, since we don't know if the driver correctly returns ErrNotExist.
|
||||||
|
// (FIXME: make that mandatory for drivers).
|
||||||
|
graph.driver.Remove(img.ID)
|
||||||
|
|
||||||
tmp, err := graph.Mktemp("")
|
tmp, err := graph.Mktemp("")
|
||||||
defer os.RemoveAll(tmp)
|
defer os.RemoveAll(tmp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue