]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/rbd_support: rename 'dump' command to 'list'
authorMykola Golub <mgolub@suse.com>
Sun, 26 Jan 2020 14:05:56 +0000 (14:05 +0000)
committerMykola Golub <mgolub@suse.com>
Thu, 20 Feb 2020 16:24:28 +0000 (16:24 +0000)
and remove the old 'list' command -- we can live with one command.

Signed-off-by: Mykola Golub <mgolub@suse.com>
src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py
src/pybind/mgr/rbd_support/module.py

index 1b93492482d495fd4fee87acc86180fcc35ce939..220eab01c0ceb7493abd63860909355a60da37ea 100644 (file)
@@ -93,6 +93,22 @@ class LevelSpec:
         self.namespace = namespace
         self.image_id = image_id
 
+    def __eq__(self, level_spec):
+        return self.id == level_spec.id
+
+    def is_child_of(self, level_spec):
+        if level_spec.is_global():
+            return not self.is_global()
+        if level_spec.pool_id != self.pool_id:
+            return False
+        if level_spec.namespace is None:
+            return self.namespace is not None
+        if level_spec.namespace != self.namespace:
+            return False
+        if level_spec.image_id is None:
+            return self.image_id is not None
+        return False
+
     def is_global(self):
         return self.pool_id is None
 
@@ -659,27 +675,34 @@ class MirrorSnapshotScheduleHandler:
 
     def list(self, level_spec_name):
         self.log.debug("list: level_spec={}".format(level_spec_name))
+
+        if not level_spec_name:
+            level_spec_name = ""
+
         try:
             level_spec = LevelSpec.from_name(self, level_spec_name)
         except ValueError as e:
             return -errno.EINVAL, '', "Invalid level spec {}: {}".format(
                 level_spec_name, e)
-        with self.lock:
-            schedule = self.schedules.get(level_spec.id)
-            if schedule is None:
-                return -errno.ENOENT, '', "No schedule for {}".format(
-                    level_spec_name)
-            return 0, schedule.to_json(), ""
-
-    def dump(self):
-        self.log.debug("dump")
+
         result = {}
         with self.lock:
+            parent = LevelSpec.from_id(self, "")
+            if not level_spec.is_global():
+                for level_spec_id in self.schedules:
+                    ls = LevelSpec.from_id(self, level_spec_id)
+                    if ls == level_spec:
+                        parent = ls
+                        break
+                    if level_spec.is_child_of(ls) and ls.is_child_of(parent):
+                        parent = ls
             for level_spec_id, schedule in self.schedules.items():
-                result[level_spec_id] = {
-                    'name' : schedule.name,
-                    'schedule' : schedule.to_list(),
-                }
+                ls = LevelSpec.from_id(self, level_spec_id)
+                if ls == parent or ls.is_child_of(parent):
+                    result[level_spec_id] = {
+                        'name' : schedule.name,
+                        'schedule' : schedule.to_list(),
+                    }
         return 0, json.dumps(result, indent=4, sort_keys=True), ""
 
     def status(self, level_spec_name):
@@ -716,9 +739,7 @@ class MirrorSnapshotScheduleHandler:
             return self.remove_schedule(cmd['level_spec'], cmd.get('interval'),
                                         cmd.get('start_time'))
         elif prefix == 'list':
-            return self.list(cmd['level_spec'])
-        elif prefix == 'dump':
-            return self.dump()
+            return self.list(cmd.get('level_spec', None))
         elif prefix == 'status':
             return self.status(cmd.get('level_spec', None))
 
index a59a13aac2e6c268127cbe4d0cbd2341424bc9f0..2f8f26a89f690af554949a35b490ac22703a64d0 100644 (file)
@@ -35,12 +35,7 @@ class Module(MgrModule):
         },
         {
             "cmd": "rbd mirror snapshot schedule list "
-                   "name=level_spec,type=CephString ",
-            "desc": "List rbd mirror snapshot schedule",
-            "perm": "r"
-        },
-        {
-            "cmd": "rbd mirror snapshot schedule dump",
+                   "name=level_spec,type=CephString,req=false ",
             "desc": "List rbd mirror snapshot schedule",
             "perm": "r"
         },