diff options
author | Paul Holzinger <paul.holzinger@web.de> | 2021-01-20 22:56:13 +0100 |
---|---|---|
committer | Paul Holzinger <paul.holzinger@web.de> | 2021-01-21 11:50:45 +0100 |
commit | 836fa4c493c3809da4bbcbbec0bf5ceb954e7410 (patch) | |
tree | a07df59ab8a8ca5ef913c69c977662d0cbb441aa /libpod/network/lock.go | |
parent | c1cd512cb824c4c470efe7660c91ffeda62327bc (diff) | |
download | podman-836fa4c493c3809da4bbcbbec0bf5ceb954e7410.tar.gz podman-836fa4c493c3809da4bbcbbec0bf5ceb954e7410.tar.bz2 podman-836fa4c493c3809da4bbcbbec0bf5ceb954e7410.zip |
Move the cni lock file into the cni config dir
Commit(fe3faa517e1b) introduced a lock file for network create/rm calls.
There is a problem with the location of the lock file. The lock file was
stored in the tmpdir. Running multiple podman network create/remove
commands in parallel with different tmpdirs made the lockfile inaccessible
to the other process, and so parallel read/write operations to the cni
config directory continued to occur. This scenario happened frequently
during the e2e tests and caused some flakes.
Fixes #9041
Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
Diffstat (limited to 'libpod/network/lock.go')
-rw-r--r-- | libpod/network/lock.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libpod/network/lock.go b/libpod/network/lock.go index 0395359eb..037f41efa 100644 --- a/libpod/network/lock.go +++ b/libpod/network/lock.go @@ -1,6 +1,10 @@ package network import ( + "os" + "path/filepath" + + "github.com/containers/common/pkg/config" "github.com/containers/storage" ) @@ -8,8 +12,13 @@ import ( // delete cases to avoid unwanted collisions in network names. // TODO this uses a file lock and should be converted to shared memory // when we have a more general shared memory lock in libpod -func acquireCNILock(lockPath string) (*CNILock, error) { - l, err := storage.GetLockfile(lockPath) +func acquireCNILock(config *config.Config) (*CNILock, error) { + cniDir := GetCNIConfDir(config) + err := os.MkdirAll(cniDir, 0755) + if err != nil { + return nil, err + } + l, err := storage.GetLockfile(filepath.Join(cniDir, LockFileName)) if err != nil { return nil, err } |