From 5ac2901f54ff4c0b1702e1b82c5139b3d5baf39a Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 29 Jan 2021 12:10:52 +0800 Subject: [PATCH] pybind/mgr/status: construct defaultdict without key it's simply wrong to construct defaultdict with the key which does not have the mapped value, what we should do is to specify the "default_factory" which construct the default value whose key does not exist in the dict when being accessed. Signed-off-by: Kefu Chai --- src/pybind/mgr/status/module.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/pybind/mgr/status/module.py b/src/pybind/mgr/status/module.py index 3ef39c20f805d..f32351f8532c8 100644 --- a/src/pybind/mgr/status/module.py +++ b/src/pybind/mgr/status/module.py @@ -101,8 +101,9 @@ class Module(MgrModule): if output_format not in ('json', 'json-pretty'): activity = "Reqs: " + mgr_util.format_dimless(rate, 5) + "/s" - defaults = defaultdict(lambda: None, {'version' : 'unknown'}) - metadata = self.get_metadata('mds', info['name'], default=defaults) + metadata = self.get_metadata('mds', info['name'], + default=defaultdict(lambda: 'unknown')) + assert metadata mds_versions[metadata['ceph_version']].append(info['name']) if output_format in ('json', 'json-pretty'): @@ -150,8 +151,9 @@ class Module(MgrModule): if output_format not in ('json', 'json-pretty'): activity = "Evts: " + mgr_util.format_dimless(events, 5) + "/s" - defaults = defaultdict(lambda: None, {'version' : 'unknown'}) - metadata = self.get_metadata('mds', daemon_info['name'], default=defaults) + metadata = self.get_metadata('mds', daemon_info['name'], + default=defaultdict(lambda: 'unknown')) + assert metadata mds_versions[metadata['ceph_version']].append(daemon_info['name']) if output_format in ('json', 'json-pretty'): @@ -224,8 +226,9 @@ class Module(MgrModule): standby_table.left_padding_width = 0 standby_table.right_padding_width = 2 for standby in fsmap['standbys']: - defaults = defaultdict(lambda: None, {'version' : 'unknown'}) - metadata = self.get_metadata('mds', standby['name'], default=defaults) + metadata = self.get_metadata('mds', standby['name'], + default=defaultdict(lambda: 'unknown')) + assert metadata mds_versions[metadata['ceph_version']].append(standby['name']) if output_format in ('json', 'json-pretty'): @@ -320,9 +323,9 @@ class Module(MgrModule): kb_avail = 0 if osd_id in osd_stats: - defaults = defaultdict(lambda: None, {'hostname' : ''}) - metadata = self.get_metadata('osd', str(osd_id), default=defaults) + metadata = self.get_metadata('osd', str(osd_id), default=defaultdict(str)) stats = osd_stats[osd_id] + assert metadata hostname = metadata['hostname'] kb_used = stats['kb_used'] * 1024 kb_avail = stats['kb_avail'] * 1024 -- 2.39.5