mirror of
https://github.com/ansible/awx.git
synced 2026-02-26 07:26:03 -03:30
Merge pull request #3928 from wenottingham/waka-flocka
Use lockf, not flock. Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
This commit is contained in:
@@ -1826,9 +1826,9 @@ class RunProjectUpdate(BaseTask):
|
|||||||
|
|
||||||
def release_lock(self, instance):
|
def release_lock(self, instance):
|
||||||
try:
|
try:
|
||||||
fcntl.flock(self.lock_fd, fcntl.LOCK_UN)
|
fcntl.lockf(self.lock_fd, fcntl.LOCK_UN)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
logger.error("I/O error({0}) while trying to open lock file [{1}]: {2}".format(e.errno, instance.get_lock_file(), e.strerror))
|
logger.error("I/O error({0}) while trying to release lock file [{1}]: {2}".format(e.errno, instance.get_lock_file(), e.strerror))
|
||||||
os.close(self.lock_fd)
|
os.close(self.lock_fd)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
@@ -1844,7 +1844,7 @@ class RunProjectUpdate(BaseTask):
|
|||||||
raise RuntimeError(u'Invalid lock file path')
|
raise RuntimeError(u'Invalid lock file path')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.lock_fd = os.open(lock_path, os.O_RDONLY | os.O_CREAT)
|
self.lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
logger.error("I/O error({0}) while trying to open lock file [{1}]: {2}".format(e.errno, lock_path, e.strerror))
|
logger.error("I/O error({0}) while trying to open lock file [{1}]: {2}".format(e.errno, lock_path, e.strerror))
|
||||||
raise
|
raise
|
||||||
@@ -1856,7 +1856,7 @@ class RunProjectUpdate(BaseTask):
|
|||||||
if instance.cancel_flag:
|
if instance.cancel_flag:
|
||||||
logger.debug("ProjectUpdate({0}) was cancelled".format(instance.pk))
|
logger.debug("ProjectUpdate({0}) was cancelled".format(instance.pk))
|
||||||
return
|
return
|
||||||
fcntl.flock(self.lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
fcntl.lockf(self.lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||||
break
|
break
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
if e.errno not in (errno.EAGAIN, errno.EACCES):
|
if e.errno not in (errno.EAGAIN, errno.EACCES):
|
||||||
|
|||||||
@@ -2248,7 +2248,7 @@ def test_os_open_oserror():
|
|||||||
|
|
||||||
def test_fcntl_ioerror():
|
def test_fcntl_ioerror():
|
||||||
with pytest.raises(OSError):
|
with pytest.raises(OSError):
|
||||||
fcntl.flock(99999, fcntl.LOCK_EX)
|
fcntl.lockf(99999, fcntl.LOCK_EX)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('os.open')
|
@mock.patch('os.open')
|
||||||
@@ -2276,8 +2276,8 @@ def test_aquire_lock_open_fail_logged(logging_getLogger, os_open):
|
|||||||
@mock.patch('os.open')
|
@mock.patch('os.open')
|
||||||
@mock.patch('os.close')
|
@mock.patch('os.close')
|
||||||
@mock.patch('logging.getLogger')
|
@mock.patch('logging.getLogger')
|
||||||
@mock.patch('fcntl.flock')
|
@mock.patch('fcntl.lockf')
|
||||||
def test_aquire_lock_acquisition_fail_logged(fcntl_flock, logging_getLogger, os_close, os_open):
|
def test_aquire_lock_acquisition_fail_logged(fcntl_lockf, logging_getLogger, os_close, os_open):
|
||||||
err = IOError()
|
err = IOError()
|
||||||
err.errno = 3
|
err.errno = 3
|
||||||
err.strerror = 'dummy message'
|
err.strerror = 'dummy message'
|
||||||
@@ -2291,7 +2291,7 @@ def test_aquire_lock_acquisition_fail_logged(fcntl_flock, logging_getLogger, os_
|
|||||||
logger = mock.Mock()
|
logger = mock.Mock()
|
||||||
logging_getLogger.return_value = logger
|
logging_getLogger.return_value = logger
|
||||||
|
|
||||||
fcntl_flock.side_effect = err
|
fcntl_lockf.side_effect = err
|
||||||
|
|
||||||
ProjectUpdate = tasks.RunProjectUpdate()
|
ProjectUpdate = tasks.RunProjectUpdate()
|
||||||
with pytest.raises(IOError, message='dummy message'):
|
with pytest.raises(IOError, message='dummy message'):
|
||||||
|
|||||||
Reference in New Issue
Block a user