]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/mirroring: interface to fetch mirror daemon status
authorVenky Shankar <vshankar@redhat.com>
Mon, 15 Feb 2021 09:21:56 +0000 (04:21 -0500)
committersinguliere <singuliere@autistici.org>
Tue, 9 Mar 2021 23:25:50 +0000 (00:25 +0100)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 221e3e01c74f522986ac92ec35b3f60eeaabe0bf)

src/pybind/mgr/mirroring/fs/snapshot_mirror.py
src/pybind/mgr/mirroring/module.py

index e9e3e32196454ba389451a7ee3dd9ff60a76a0fe..44aafb492376f3a4f1e8879032eff503c88df38c 100644 (file)
@@ -599,3 +599,34 @@ class FSSnapshotMirror:
                 return fspolicy.summary()
         except MirrorException as me:
             return me.args[0], '', me.args[1]
+
+    def daemon_status(self, filesystem):
+        try:
+            with self.lock:
+                if not self.filesystem_exist(filesystem):
+                    raise MirrorException(-errno.ENOENT, f'filesystem {filesystem} does not exist')
+                fspolicy = self.pool_policy.get(filesystem, None)
+                if not fspolicy:
+                    raise MirrorException(-errno.EINVAL, f'filesystem {filesystem} is not mirrored')
+                daemons = {}
+                sm = self.mgr.get('service_map')
+                daemon_entry = sm['services'].get('cephfs-mirror', None)
+                if daemon_entry:
+                    for daemon_key in daemon_entry['daemons']:
+                        try:
+                            daemon_id = int(daemon_key)
+                            daemon_status = self.mgr.get_daemon_status('cephfs-mirror', daemon_key)
+                            if not daemon_status:
+                                # temporary, should get updated soon
+                                log.debug(f'daemon status not yet availble for daemon_id {daemon_id}')
+                                continue
+                            try:
+                                daemons[daemon_id] = json.loads(daemon_status['status_json'])
+                            except KeyError:
+                                # temporary, should get updated soon
+                                log.debug(f'daemon status not yet available for daemon_id {daemon_id}')
+                        except ValueError:
+                            pass
+                return 0, json.dumps(daemons), ''
+        except MirrorException as me:
+            return me.args[0], '', me.args[1]
index 5549e9926af7ce3e862b1b8a33670e526aaf81fc..0ff3c084b9de506b9312a879f4a88fedab6ac61a 100644 (file)
@@ -68,3 +68,9 @@ class Module(MgrModule):
                                      fs_name: str):
         """Get current instance to directory map for a filesystem"""
         return self.fs_snapshot_mirror.show_distribution(fs_name)
+
+    @CLIReadCommand('fs snapshot mirror daemon status')
+    def snapshot_mirror_daemon_status(self,
+                                      fs_name: str):
+        """Get mirror daemon status"""
+        return self.fs_snapshot_mirror.daemon_status(fs_name)