From dd45ec499c009a4d0487b22f59f9360fb4f55c34 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Han?= Date: Thu, 1 Jul 2021 17:23:57 +0200 Subject: [PATCH] src/pybind/mgr/mirroring/fs/snapshot_mirror.py: do not assume a cephfs-mirror daemon is always running MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We should not assume a daemon is runnning. If the daemon is not running we get the default value of None. So let's skip the status if no daemon is running yet. Fixes: https://tracker.ceph.com/issues/51476 Signed-off-by: Sébastien Han --- .../mgr/mirroring/fs/snapshot_mirror.py | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/src/pybind/mgr/mirroring/fs/snapshot_mirror.py b/src/pybind/mgr/mirroring/fs/snapshot_mirror.py index 583a8037b6118..a3295514c2d9b 100644 --- a/src/pybind/mgr/mirroring/fs/snapshot_mirror.py +++ b/src/pybind/mgr/mirroring/fs/snapshot_mirror.py @@ -761,35 +761,36 @@ class FSSnapshotMirror: sm = self.mgr.get('service_map') daemon_entry = sm['services'].get('cephfs-mirror', None) log.debug(f'daemon_entry: {daemon_entry}') - for daemon_key in daemon_entry.get('daemons', []): - try: - daemon_id = int(daemon_key) - except ValueError: - continue - daemon = { - 'daemon_id' : daemon_id, - 'filesystems' : [] - } # type: Dict[str, Any] - daemon_status = self.mgr.get_daemon_status('cephfs-mirror', daemon_key) - if not daemon_status: - log.debug(f'daemon status not yet availble for cephfs-mirror daemon: {daemon_key}') - continue - status = json.loads(daemon_status['status_json']) - for fs_id, fs_desc in status.items(): - fs = {'filesystem_id' : int(fs_id), - 'name' : fs_desc['name'], - 'directory_count' : fs_desc['directory_count'], - 'peers' : [] + if daemon_entry is not None: + for daemon_key in daemon_entry.get('daemons', []): + try: + daemon_id = int(daemon_key) + except ValueError: + continue + daemon = { + 'daemon_id' : daemon_id, + 'filesystems' : [] } # type: Dict[str, Any] - for peer_uuid, peer_desc in fs_desc['peers'].items(): - peer = { - 'uuid' : peer_uuid, - 'remote' : peer_desc['remote'], - 'stats' : peer_desc['stats'] - } - fs['peers'].append(peer) - daemon['filesystems'].append(fs) - daemons.append(daemon) + daemon_status = self.mgr.get_daemon_status('cephfs-mirror', daemon_key) + if not daemon_status: + log.debug(f'daemon status not yet availble for cephfs-mirror daemon: {daemon_key}') + continue + status = json.loads(daemon_status['status_json']) + for fs_id, fs_desc in status.items(): + fs = {'filesystem_id' : int(fs_id), + 'name' : fs_desc['name'], + 'directory_count' : fs_desc['directory_count'], + 'peers' : [] + } # type: Dict[str, Any] + for peer_uuid, peer_desc in fs_desc['peers'].items(): + peer = { + 'uuid' : peer_uuid, + 'remote' : peer_desc['remote'], + 'stats' : peer_desc['stats'] + } + fs['peers'].append(peer) + daemon['filesystems'].append(fs) + daemons.append(daemon) return 0, json.dumps(daemons), '' except MirrorException as me: return me.args[0], '', me.args[1] -- 2.39.5