]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-disk: protect list with activate lock
authorLoic Dachary <ldachary@redhat.com>
Fri, 26 Feb 2016 11:57:37 +0000 (18:57 +0700)
committerLoic Dachary <ldachary@redhat.com>
Fri, 4 Mar 2016 02:13:35 +0000 (09:13 +0700)
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 <loic@dachary.org>
src/ceph-disk/ceph_disk/main.py
src/ceph-disk/tests/test_main.py

index 86e166ac7a3b30426ab8a5ab56c694fe40fa4ec8..8bbbd190f24152675fa8b1de83c1dc07c01682ea 100755 (executable)
@@ -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 = []
index 092ef490ac4c1624c8509da810be16adc427b21a..1cbf1747956c1c8e44528b61d3f4617c24eca900 100644 (file)
@@ -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 = {