mirror of
https://github.com/containers/podman.git
synced 2025-11-30 18:18:18 +08:00
Update c/storage after https://github.com/containers/storage/pull/1436
... and update to remove the now-deprecated Locker interface. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
81
vendor/github.com/containers/storage/store.go
generated
vendored
81
vendor/github.com/containers/storage/store.go
generated
vendored
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
"github.com/containers/storage/pkg/ioutils"
|
||||
"github.com/containers/storage/pkg/lockfile"
|
||||
"github.com/containers/storage/pkg/parsers"
|
||||
"github.com/containers/storage/pkg/stringutils"
|
||||
"github.com/containers/storage/pkg/system"
|
||||
@@ -579,30 +580,31 @@ type ContainerOptions struct {
|
||||
}
|
||||
|
||||
type store struct {
|
||||
lastLoaded time.Time
|
||||
runRoot string
|
||||
graphLock Locker
|
||||
usernsLock Locker
|
||||
graphRoot string
|
||||
graphDriverName string
|
||||
graphOptions []string
|
||||
pullOptions map[string]string
|
||||
uidMap []idtools.IDMap
|
||||
gidMap []idtools.IDMap
|
||||
autoUsernsUser string
|
||||
additionalUIDs *idSet // Set by getAvailableIDs()
|
||||
additionalGIDs *idSet // Set by getAvailableIDs()
|
||||
autoNsMinSize uint32
|
||||
autoNsMaxSize uint32
|
||||
graphDriver drivers.Driver
|
||||
layerStore rwLayerStore
|
||||
roLayerStores []roLayerStore
|
||||
imageStore rwImageStore
|
||||
roImageStores []roImageStore
|
||||
containerStore rwContainerStore
|
||||
digestLockRoot string
|
||||
disableVolatile bool
|
||||
transientStore bool
|
||||
lastLoaded time.Time
|
||||
runRoot string
|
||||
graphLock *lockfile.LockFile
|
||||
usernsLock *lockfile.LockFile
|
||||
graphRoot string
|
||||
graphDriverName string
|
||||
graphOptions []string
|
||||
pullOptions map[string]string
|
||||
uidMap []idtools.IDMap
|
||||
gidMap []idtools.IDMap
|
||||
autoUsernsUser string
|
||||
additionalUIDs *idSet // Set by getAvailableIDs()
|
||||
additionalGIDs *idSet // Set by getAvailableIDs()
|
||||
autoNsMinSize uint32
|
||||
autoNsMaxSize uint32
|
||||
graphLockLastWrite lockfile.LastWrite
|
||||
graphDriver drivers.Driver
|
||||
layerStore rwLayerStore
|
||||
roLayerStores []roLayerStore
|
||||
imageStore rwImageStore
|
||||
roImageStores []roImageStore
|
||||
containerStore rwContainerStore
|
||||
digestLockRoot string
|
||||
disableVolatile bool
|
||||
transientStore bool
|
||||
}
|
||||
|
||||
// GetStore attempts to find an already-created Store object matching the
|
||||
@@ -677,12 +679,12 @@ func GetStore(options types.StoreOptions) (Store, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
graphLock, err := GetLockfile(filepath.Join(options.GraphRoot, "storage.lock"))
|
||||
graphLock, err := lockfile.GetLockFile(filepath.Join(options.GraphRoot, "storage.lock"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
usernsLock, err := GetLockfile(filepath.Join(options.GraphRoot, "userns.lock"))
|
||||
usernsLock, err := lockfile.GetLockFile(filepath.Join(options.GraphRoot, "userns.lock"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -713,6 +715,18 @@ func GetStore(options types.StoreOptions) (Store, error) {
|
||||
transientStore: options.TransientStore,
|
||||
pullOptions: options.PullOptions,
|
||||
}
|
||||
if err := func() error { // A scope for defer
|
||||
s.graphLock.Lock()
|
||||
defer s.graphLock.Unlock()
|
||||
lastWrite, err := s.graphLock.GetLastWrite()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.graphLockLastWrite = lastWrite
|
||||
return nil
|
||||
}(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := s.load(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -839,7 +853,7 @@ func (s *store) load() error {
|
||||
|
||||
// GetDigestLock returns a digest-specific Locker.
|
||||
func (s *store) GetDigestLock(d digest.Digest) (Locker, error) {
|
||||
return GetLockfile(filepath.Join(s.digestLockRoot, d.String()))
|
||||
return lockfile.GetLockFile(filepath.Join(s.digestLockRoot, d.String()))
|
||||
}
|
||||
|
||||
func (s *store) getGraphDriver() (drivers.Driver, error) {
|
||||
@@ -2510,10 +2524,11 @@ func (s *store) mount(id string, options drivers.MountOpts) (string, error) {
|
||||
}
|
||||
defer rlstore.stopWriting()
|
||||
|
||||
modified, err := s.graphLock.Modified()
|
||||
lastWrite, modified, err := s.graphLock.ModifiedSince(s.graphLockLastWrite)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
s.graphLockLastWrite = lastWrite
|
||||
|
||||
/* We need to make sure the home mount is present when the Mount is done. */
|
||||
if modified {
|
||||
@@ -2657,10 +2672,11 @@ func (s *store) Diff(from, to string, options *DiffOptions) (io.ReadCloser, erro
|
||||
s.graphLock.Lock()
|
||||
defer s.graphLock.Unlock()
|
||||
|
||||
modified, err := s.graphLock.Modified()
|
||||
lastWrite, modified, err := s.graphLock.ModifiedSince(s.graphLockLastWrite)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.graphLockLastWrite = lastWrite
|
||||
|
||||
// We need to make sure the home mount is present when the Mount is done.
|
||||
if modified {
|
||||
@@ -3219,11 +3235,14 @@ func (s *store) Shutdown(force bool) ([]string, error) {
|
||||
}
|
||||
if err == nil {
|
||||
err = s.graphDriver.Cleanup()
|
||||
if err2 := s.graphLock.Touch(); err2 != nil {
|
||||
// We don’t retain the lastWrite value, and treat this update as if someone else did the .Cleanup(),
|
||||
// so that we reload after a .Shutdown() the same way other processes would.
|
||||
// Shutdown() is basically an error path, so reliability is more important than performance.
|
||||
if _, err2 := s.graphLock.RecordWrite(); err2 != nil {
|
||||
if err == nil {
|
||||
err = err2
|
||||
} else {
|
||||
err = fmt.Errorf("(graphLock.Touch failed: %v) %w", err2, err)
|
||||
err = fmt.Errorf("(graphLock.RecordWrite failed: %v) %w", err2, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user