From: Sébastien Han Date: Thu, 1 Jul 2021 15:23:57 +0000 (+0200) Subject: src/pybind/mgr/mirroring/fs/snapshot_mirror.py: do not assume a cephfs-mirror daemon... X-Git-Tag: v17.1.0~1469^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dd45ec499c009a4d0487b22f59f9360fb4f55c34;p=ceph.git src/pybind/mgr/mirroring/fs/snapshot_mirror.py: do not assume a cephfs-mirror daemon is always running 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 --- diff --git a/src/pybind/mgr/mirroring/fs/snapshot_mirror.py b/src/pybind/mgr/mirroring/fs/snapshot_mirror.py index 583a8037b611..a3295514c2d9 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]