Merge "Don't warn on lock removal if file doesn't exist"

This commit is contained in:
Zuul 2020-06-08 17:05:16 +00:00 committed by Gerrit Code Review
commit 80a6e1d489
2 changed files with 22 additions and 5 deletions

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
import contextlib import contextlib
import errno
import functools import functools
import logging import logging
import os import os
@ -199,9 +200,10 @@ def remove_external_lock_file(name, lock_file_prefix=None, lock_path=None,
lock_file_path = _get_lock_path(name, lock_file_prefix, lock_path) lock_file_path = _get_lock_path(name, lock_file_prefix, lock_path)
try: try:
os.remove(lock_file_path) os.remove(lock_file_path)
except OSError: except OSError as exc:
LOG.info('Failed to remove file %(file)s', if exc.errno != errno.ENOENT:
{'file': lock_file_path}) LOG.warning('Failed to remove file %(file)s',
{'file': lock_file_path})
def internal_lock(name, semaphores=None): def internal_lock(name, semaphores=None):

View File

@ -13,6 +13,7 @@
# under the License. # under the License.
import collections import collections
import errno
import multiprocessing import multiprocessing
import os import os
import signal import signal
@ -320,8 +321,8 @@ class LockTestCase(test_base.BaseTestCase):
remove_mock.assert_called_once_with(path_mock.return_value) remove_mock.assert_called_once_with(path_mock.return_value)
log_mock.assert_not_called() log_mock.assert_not_called()
@mock.patch('logging.Logger.info') @mock.patch('logging.Logger.warning')
@mock.patch('os.remove', side_effect=OSError) @mock.patch('os.remove', side_effect=OSError(errno.ENOENT, None))
@mock.patch('oslo_concurrency.lockutils._get_lock_path') @mock.patch('oslo_concurrency.lockutils._get_lock_path')
def test_remove_lock_external_file_doesnt_exists(self, path_mock, def test_remove_lock_external_file_doesnt_exists(self, path_mock,
remove_mock, log_mock): remove_mock, log_mock):
@ -332,6 +333,20 @@ class LockTestCase(test_base.BaseTestCase):
mock.sentinel.prefix, mock.sentinel.prefix,
mock.sentinel.lock_path) mock.sentinel.lock_path)
remove_mock.assert_called_once_with(path_mock.return_value) remove_mock.assert_called_once_with(path_mock.return_value)
log_mock.assert_not_called()
@mock.patch('logging.Logger.warning')
@mock.patch('os.remove', side_effect=OSError(errno.EPERM, None))
@mock.patch('oslo_concurrency.lockutils._get_lock_path')
def test_remove_lock_external_file_permission_error(
self, path_mock, remove_mock, log_mock):
lockutils.remove_external_lock_file(mock.sentinel.name,
mock.sentinel.prefix,
mock.sentinel.lock_path)
path_mock.assert_called_once_with(mock.sentinel.name,
mock.sentinel.prefix,
mock.sentinel.lock_path)
remove_mock.assert_called_once_with(path_mock.return_value)
log_mock.assert_called() log_mock.assert_called()
def test_no_slash_in_b64(self): def test_no_slash_in_b64(self):