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:
softwarefactory-project-zuul[bot]
2019-05-28 16:29:23 +00:00
committed by GitHub
2 changed files with 8 additions and 8 deletions

View File

@@ -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):

View File

@@ -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'):