]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Workaround for missing counters 29800/head
authorStephan Müller <smueller@suse.com>
Tue, 27 Aug 2019 14:53:01 +0000 (16:53 +0200)
committerStephan Müller <smueller@suse.com>
Tue, 17 Sep 2019 11:57:31 +0000 (13:57 +0200)
Currently all counters fail because of some bug. This also showed an bug
inside the UI as it produced errors, because we expected them to be
always aviable.

Fixes: https://tracker.ceph.com/issues/41372
Signed-off-by: Stephan Müller <smueller@suse.com>
src/pybind/mgr/dashboard/controllers/cephfs.py
src/pybind/mgr/dashboard/tests/test_cephfs.py [new file with mode: 0644]
src/pybind/mgr/dashboard/tests/test_rbd_mirroring.py

index 049bc7c5a88c575ca99311a29d71090a286abded..1655751d47c1bfb33073ec412021d523acca9fa1 100644 (file)
@@ -121,6 +121,12 @@ class CephFS(RESTController):
 
         return names
 
+    def _append_mds_metadata(self, mds_versions, metadata_key):
+        metadata = mgr.get_metadata('mds', metadata_key)
+        if metadata is None:
+            return
+        mds_versions[metadata.get('ceph_version', 'unknown')].append(metadata_key)
+
     # pylint: disable=too-many-statements,too-many-branches
     def fs_status(self, fs_id):
         mds_versions = defaultdict(list)
@@ -175,9 +181,7 @@ class CephFS(RESTController):
                 else:
                     activity = 0.0
 
-                metadata = mgr.get_metadata('mds', info['name'])
-                mds_versions[metadata.get('ceph_version', 'unknown')].append(
-                    info['name'])
+                self._append_mds_metadata(mds_versions, info['name'])
                 rank_table.append(
                     {
                         "rank": rank,
@@ -244,10 +248,7 @@ class CephFS(RESTController):
 
         standby_table = []
         for standby in fsmap['standbys']:
-            metadata = mgr.get_metadata('mds', standby['name'])
-            mds_versions[metadata.get('ceph_version', 'unknown')].append(
-                standby['name'])
-
+            self._append_mds_metadata(mds_versions, standby['name'])
             standby_table.append({
                 'name': standby['name']
             })
@@ -324,7 +325,7 @@ class CephFSClients(object):
 
 @UiApiController('/cephfs', Scope.CEPHFS)
 class CephFsUi(CephFS):
-    RESOURCE_ID='fs_id'
+    RESOURCE_ID = 'fs_id'
 
     @RESTController.Resource('GET')
     def tabs(self, fs_id):
@@ -348,5 +349,3 @@ class CephFsUi(CephFS):
         data['clients'] = self._clients(fs_id)
 
         return data
-
-
diff --git a/src/pybind/mgr/dashboard/tests/test_cephfs.py b/src/pybind/mgr/dashboard/tests/test_cephfs.py
new file mode 100644 (file)
index 0000000..e9abda5
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+from collections import defaultdict
+try:
+    from mock import Mock
+except ImportError:
+    from unittest.mock import Mock
+
+from .. import mgr
+from . import ControllerTestCase
+from ..controllers.cephfs import CephFS
+
+
+class MetaDataMock(object):
+    def get(self, _x, _y):
+        return 'bar'
+
+
+def get_metadata_mock(key, meta_key):
+    return {
+        'mds': {
+            None: None,  # Unknown key
+            'foo': MetaDataMock()
+        }[meta_key]
+    }[key]
+
+
+class CephFsTest(ControllerTestCase):
+    cephFs = CephFS()
+
+    @classmethod
+    def setup_server(cls):
+        mgr.get_metadata = Mock(side_effect=get_metadata_mock)
+
+    def tearDown(self):
+        mgr.get_metadata.stop()
+
+    def test_append_of_mds_metadata_if_key_is_not_found(self):
+        mds_versions = defaultdict(list)
+        # pylint: disable=protected-access
+        self.cephFs._append_mds_metadata(mds_versions, None)
+        self.assertEqual(len(mds_versions), 0)
+
+    def test_append_of_mds_metadata_with_existing_metadata(self):
+        mds_versions = defaultdict(list)
+        # pylint: disable=protected-access
+        self.cephFs._append_mds_metadata(mds_versions, 'foo')
+        self.assertEqual(len(mds_versions), 1)
+        self.assertEqual(mds_versions['bar'], ['foo'])
index 90ed0789f1755a94a24a8aed3064f621b89397e6..605cc4cd5a51fc62c2e01c1fb841891b8606373c 100644 (file)
@@ -52,7 +52,7 @@ class RbdMirroringSummaryControllerTest(ControllerTestCase):
     @classmethod
     def setup_server(cls):
         mgr.list_servers.return_value = mock_list_servers
-        mgr.get_metadata.return_value = mock_get_metadata
+        mgr.get_metadata = mock.Mock(return_value=mock_get_metadata)
         mgr.get_daemon_status.return_value = mock_get_daemon_status
         mgr.get.side_effect = lambda key: {
             'osd_map': mock_osd_map,