From: Mykola Golub Date: Sun, 26 Jan 2020 14:05:56 +0000 (+0000) Subject: mgr/rbd_support: rename 'dump' command to 'list' X-Git-Tag: v15.1.1~341^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a763c0eadac01209900441d2701b1f6294fbc0d0;p=ceph-ci.git mgr/rbd_support: rename 'dump' command to 'list' and remove the old 'list' command -- we can live with one command. Signed-off-by: Mykola Golub --- diff --git a/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py b/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py index 1b93492482d..220eab01c0c 100644 --- a/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py +++ b/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py @@ -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)) diff --git a/src/pybind/mgr/rbd_support/module.py b/src/pybind/mgr/rbd_support/module.py index a59a13aac2e..2f8f26a89f6 100644 --- a/src/pybind/mgr/rbd_support/module.py +++ b/src/pybind/mgr/rbd_support/module.py @@ -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" },