Fixes race condition with privsep utime
There is a race condition that occurs over NFS when multiple instances are being created where utime fails, due to some other process modifying the file path. This patch ensures the path is created and is readable before attempting to modify with utime. Closes-Bug: 1809123 Change-Id: Id68aa27a8ab08d9c00655e5ed6b48d194aa8e6f6 Signed-off-by: Tim Rozet <trozet@redhat.com>
This commit is contained in:
@@ -70,12 +70,10 @@ def chmod(path, mode):
|
||||
def utime(path):
|
||||
if not os.path.exists(path):
|
||||
raise exception.FileNotFound(file_path=path)
|
||||
|
||||
# NOTE(mikal): the old version of this used execute(touch, ...), which
|
||||
# would apparently fail on shared storage when multiple instances were
|
||||
# being launched at the same time. If we see failures here, we might need
|
||||
# to wrap this in a try / except.
|
||||
os.utime(path, None)
|
||||
# context wrapper ensures the file exists before trying to modify time
|
||||
# which fixes a race condition with NFS image caching (see LP#1809123)
|
||||
with open(path, 'a'):
|
||||
os.utime(path, None)
|
||||
|
||||
|
||||
@nova.privsep.sys_admin_pctxt.entrypoint
|
||||
|
@@ -0,0 +1,8 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes a race condition when multiple instances are launched at the same
|
||||
time, which leads to a failure when modifying the modified time of the
|
||||
instance base image. This issue was noticed when using an NFS backend. For
|
||||
more information see https://bugs.launchpad.net/nova/+bug/1809123
|
||||
|
Reference in New Issue
Block a user