Fix locking of containerStore.BigDataDigest
It requires a WRITE lock. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
e2b414c6db
commit
66f06a85ac
|
|
@ -629,6 +629,7 @@ func (r *containerStore) BigDataSize(id, key string) (int64, error) {
|
||||||
return -1, ErrSizeUnknown
|
return -1, ErrSizeUnknown
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Requires startWriting. Yes, really, WRITING (see SetBigData).
|
||||||
func (r *containerStore) BigDataDigest(id, key string) (digest.Digest, error) {
|
func (r *containerStore) BigDataDigest(id, key string) (digest.Digest, error) {
|
||||||
if key == "" {
|
if key == "" {
|
||||||
return "", fmt.Errorf("can't retrieve digest of container big data value with empty name: %w", ErrInvalidBigDataName)
|
return "", fmt.Errorf("can't retrieve digest of container big data value with empty name: %w", ErrInvalidBigDataName)
|
||||||
|
|
|
||||||
16
store.go
16
store.go
|
|
@ -1968,15 +1968,13 @@ func (s *store) ContainerBigDataSize(id, key string) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) ContainerBigDataDigest(id, key string) (digest.Digest, error) {
|
func (s *store) ContainerBigDataDigest(id, key string) (digest.Digest, error) {
|
||||||
rcstore, err := s.getContainerStore()
|
var res digest.Digest
|
||||||
if err != nil {
|
err := s.writeToContainerStore(func(store rwContainerStore) error { // Yes, BigDataDigest requires a write lock.
|
||||||
return "", err
|
var err error
|
||||||
}
|
res, err = store.BigDataDigest(id, key)
|
||||||
if err := rcstore.startReading(); err != nil {
|
return err
|
||||||
return "", err
|
})
|
||||||
}
|
return res, err
|
||||||
defer rcstore.stopReading()
|
|
||||||
return rcstore.BigDataDigest(id, key)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *store) ContainerBigData(id, key string) ([]byte, error) {
|
func (s *store) ContainerBigData(id, key string) ([]byte, error) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue