From: Loic Dachary Date: Fri, 26 Feb 2016 11:57:37 +0000 (+0700) Subject: ceph-disk: protect list with activate lock X-Git-Tag: v10.1.0~200^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b36859ce726f6657c1a451fe91af877bdc1b8e4a;p=ceph.git ceph-disk: protect list with activate lock list may try to mount partitions to figure out the OSD id and other details. If it does so while the OSD is activated, it will race and lead to errors, either for activation or for list. Signed-off-by: Loic Dachary --- diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py index 86e166ac7a3b..8bbbd190f241 100755 --- a/src/ceph-disk/ceph_disk/main.py +++ b/src/ceph-disk/ceph_disk/main.py @@ -4115,6 +4115,14 @@ def list_devices(): def main_list(args): + activate_lock.acquire() # noqa + try: + main_list_protected(args) + finally: + activate_lock.release() # noqa + + +def main_list_protected(args): devices = list_devices() if args.path: paths = [] diff --git a/src/ceph-disk/tests/test_main.py b/src/ceph-disk/tests/test_main.py index 092ef490ac4c..1cbf1747956c 100644 --- a/src/ceph-disk/tests/test_main.py +++ b/src/ceph-disk/tests/test_main.py @@ -32,6 +32,8 @@ class TestCephDisk(object): main.setup_logging(verbose=True, log_stdout=False) def test_main_list_json(self, capsys): + data = tempfile.mkdtemp() + main.setup_statedir(data) args = main.parse_args(['list', '--format', 'json']) with patch.multiple( main, @@ -39,8 +41,11 @@ class TestCephDisk(object): main.main_list(args) out, err = capsys.readouterr() assert '{}\n' == out + shutil.rmtree(data) def test_main_list_plain(self, capsys): + data = tempfile.mkdtemp() + main.setup_statedir(data) args = main.parse_args(['list']) with patch.multiple( main, @@ -48,6 +53,7 @@ class TestCephDisk(object): main.main_list(args) out, err = capsys.readouterr() assert '' == out + shutil.rmtree(data) def test_list_format_more_osd_info_plain(self): dev = {