]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
src/pybind/mgr/mirroring/fs/snapshot_mirror.py: do not assume a cephfs-mirror daemon... 42139/head
authorSébastien Han <seb@redhat.com>
Thu, 1 Jul 2021 15:23:57 +0000 (17:23 +0200)
committerSébastien Han <seb@redhat.com>
Thu, 1 Jul 2021 15:29:59 +0000 (17:29 +0200)
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 <seb@redhat.com>
src/pybind/mgr/mirroring/fs/snapshot_mirror.py

index 583a8037b6118be078877922e7f0a87f96d349a1..a3295514c2d9b269b78b8eb4fe03fd081228647a 100644 (file)
@@ -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]