From: Kefu Chai Date: Thu, 18 Feb 2021 07:18:01 +0000 (+0800) Subject: mgr/rbd_support: avoid using list of different type of elements X-Git-Tag: v17.1.0~2831^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=403151c83c6fd2f6923fb734f2fbd2bfb6d49b07;p=ceph.git mgr/rbd_support: avoid using list of different type of elements refactor Schedules.find() to avoid using list composed of different types of elements. this annoys mypy. also take this opportunity to avoid looking up in the dict twice. Signed-off-by: Kefu Chai --- diff --git a/src/pybind/mgr/rbd_support/schedule.py b/src/pybind/mgr/rbd_support/schedule.py index eaee182cb04..50e0f6cdc44 100644 --- a/src/pybind/mgr/rbd_support/schedule.py +++ b/src/pybind/mgr/rbd_support/schedule.py @@ -473,15 +473,17 @@ class Schedules: self.save(level_spec, schedule) def find(self, pool_id, namespace, image_id=None): - levels = [None, pool_id, namespace] + levels = [pool_id, namespace] if image_id: levels.append(image_id) - - while levels: - level_spec_id = "/".join(levels[1:]) - if level_spec_id in self.schedules: - return self.schedules[level_spec_id] - del levels[-1] + nr_levels = len(levels) + while nr_levels >= 0: + # an empty spec id implies global schedule + level_spec_id = "/".join(levels[:nr_levels]) + found = self.schedules.get(level_spec_id) + if found is not None: + return found + nr_levels -= 1 return None def intersects(self, level_spec):