From e1cf6f2e0ed6817a0bd22c7567a94fac9ac010a8 Mon Sep 17 00:00:00 2001 From: Michael Fritch Date: Thu, 25 Jun 2020 14:36:22 -0600 Subject: [PATCH] mgr/mgr_module: metadata is fetched async fetch metadata using a defaultdict Signed-off-by: Michael Fritch (cherry picked from commit f06e60b591d7921b0afdd40219f3866773b00683) Conflicts: src/pybind/mgr/status/module.py --- src/pybind/mgr/mgr_module.py | 7 +++++-- src/pybind/mgr/status/module.py | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/pybind/mgr/mgr_module.py b/src/pybind/mgr/mgr_module.py index ebec969eb432..ac4fb49df075 100644 --- a/src/pybind/mgr/mgr_module.py +++ b/src/pybind/mgr/mgr_module.py @@ -877,7 +877,7 @@ class MgrModule(ceph_module.BaseMgrModule): """ return self._ceph_get_server(None) - def get_metadata(self, svc_type, svc_id): + def get_metadata(self, svc_type, svc_id, default=None): """ Fetch the daemon metadata for a particular service. @@ -890,7 +890,10 @@ class MgrModule(ceph_module.BaseMgrModule): calling this :rtype: dict, or None if no metadata found """ - return self._ceph_get_metadata(svc_type, svc_id) + metadata = self._ceph_get_metadata(svc_type, svc_id) + if metadata is None: + return default + return metadata def get_daemon_status(self, svc_type, svc_id): """ diff --git a/src/pybind/mgr/status/module.py b/src/pybind/mgr/status/module.py index d3ff1fad3533..f8509296b0c8 100644 --- a/src/pybind/mgr/status/module.py +++ b/src/pybind/mgr/status/module.py @@ -107,9 +107,9 @@ class Module(MgrModule): 5 ) + "/s" - metadata = self.get_metadata('mds', info['name']) - version = metadata.get('ceph_version', 'unknown') if metadata else 'unknown' - mds_versions[version].append(info['name']) + defaults = defaultdict(lambda: None, {'version' : 'unknown'}) + metadata = self.get_metadata('mds', info['name'], default=defaults) + mds_versions[metadata['ceph_version']].append(info['name']) rank_table.add_row([ mgr_util.bold(rank.__str__()), c_state, info['name'], activity, @@ -135,9 +135,9 @@ class Module(MgrModule): 5 ) + "/s" - metadata = self.get_metadata('mds', daemon_info['name']) - version = metadata.get('ceph_version', 'unknown') if metadata else 'unknown' - mds_versions[version].append(daemon_info['name']) + defaults = defaultdict(lambda: None, {'version' : 'unknown'}) + metadata = self.get_metadata('mds', daemon_info['name'], default=defaults) + mds_versions[metadata['ceph_version']].append(daemon_info['name']) rank_table.add_row([ "{0}-s".format(daemon_info['rank']), "standby-replay", @@ -174,9 +174,9 @@ class Module(MgrModule): standby_table = PrettyTable(["Standby MDS"]) for standby in fsmap['standbys']: - metadata = self.get_metadata('mds', standby['name']) - version = metadata.get('ceph_version', 'unknown') if metadata else 'unknown' - mds_versions[version].append(standby['name']) + defaults = defaultdict(lambda: None, {'version' : 'unknown'}) + metadata = self.get_metadata('mds', standby['name'], default=defaults) + mds_versions[metadata['ceph_version']].append(standby['name']) standby_table.add_row([standby['name']]) @@ -228,7 +228,8 @@ class Module(MgrModule): kb_avail = 0 if osd_id in osd_stats: - metadata = self.get_metadata('osd', "%s" % osd_id) + defaults = defaultdict(lambda: None, {'hostname' : ''}) + metadata = self.get_metadata('osd', str(osd_id), default=defaults) stats = osd_stats[osd_id] hostname = metadata['hostname'] kb_used = stats['kb_used'] * 1024 -- 2.47.3