Check read-only stores when Putting new layers
When we try to Store.Put() a new layer, also check read-only layer stores as part of verifying that the new layer's parent is known. Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
This commit is contained in:
parent
cab96110cf
commit
945adfcd8d
17
store.go
17
store.go
|
|
@ -740,11 +740,14 @@ func (s *store) PutLayer(id, parent string, names []string, mountLabel string, w
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, -1, err
|
return nil, -1, err
|
||||||
}
|
}
|
||||||
|
rlstores, err := s.ROLayerStores()
|
||||||
|
if err != nil {
|
||||||
|
return nil, -1, err
|
||||||
|
}
|
||||||
rcstore, err := s.ContainerStore()
|
rcstore, err := s.ContainerStore()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, -1, err
|
return nil, -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
rlstore.Lock()
|
rlstore.Lock()
|
||||||
defer rlstore.Unlock()
|
defer rlstore.Unlock()
|
||||||
if modified, err := rlstore.Modified(); modified || err != nil {
|
if modified, err := rlstore.Modified(); modified || err != nil {
|
||||||
|
|
@ -759,9 +762,15 @@ func (s *store) PutLayer(id, parent string, names []string, mountLabel string, w
|
||||||
id = stringid.GenerateRandomID()
|
id = stringid.GenerateRandomID()
|
||||||
}
|
}
|
||||||
if parent != "" {
|
if parent != "" {
|
||||||
if l, err := rlstore.Get(parent); err == nil && l != nil {
|
var ilayer *Layer
|
||||||
parent = l.ID
|
for _, lstore := range append([]ROLayerStore{rlstore}, rlstores...) {
|
||||||
} else {
|
if l, err := lstore.Get(parent); err == nil && l != nil {
|
||||||
|
ilayer = l
|
||||||
|
parent = ilayer.ID
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ilayer == nil {
|
||||||
return nil, -1, ErrLayerUnknown
|
return nil, -1, ErrLayerUnknown
|
||||||
}
|
}
|
||||||
containers, err := rcstore.Containers()
|
containers, err := rcstore.Containers()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue