MODULE_OPTION_NAME = "mirror_snapshot_schedule"
MODULE_OPTION_NAME_MAX_CONCURRENT_SNAP_CREATE = "max_concurrent_snap_create"
SCHEDULE_OID = "rbd_mirror_snapshot_schedule"
+ REFRESH_DELAY_SECONDS = 60.0
lock = Lock()
condition = Condition(lock)
try:
self.log.info("MirrorSnapshotScheduleHandler: starting")
while True:
- self.refresh_images()
+ refresh_delay = self.refresh_images()
with self.lock:
(image_spec, wait_time) = self.dequeue()
if not image_spec:
- self.condition.wait(min(wait_time, 60))
+ self.condition.wait(min(wait_time, refresh_delay))
continue
pool_id, namespace, image_id = image_spec
self.create_snapshot_requests.add(pool_id, namespace, image_id)
with self.lock:
self.schedules = schedules
- def refresh_images(self) -> None:
- if (datetime.now() - self.last_refresh_images).seconds < 60:
- return
+ def refresh_images(self) -> float:
+ elapsed = (datetime.now() - self.last_refresh_images).total_seconds()
+ if elapsed < self.REFRESH_DELAY_SECONDS:
+ return self.REFRESH_DELAY_SECONDS - elapsed
self.log.debug("MirrorSnapshotScheduleHandler: refresh_images")
self.images = {}
self.queue = {}
self.last_refresh_images = datetime.now()
- return
+ return self.REFRESH_DELAY_SECONDS
epoch = int(datetime.now().strftime('%s'))
images: Dict[str, Dict[str, Dict[str, str]]] = {}
self.watchers.unregister_stale(epoch)
self.last_refresh_images = datetime.now()
+ return self.REFRESH_DELAY_SECONDS
def load_pool_images(self,
ioctx: rados.Ioctx,
class TrashPurgeScheduleHandler:
MODULE_OPTION_NAME = "trash_purge_schedule"
SCHEDULE_OID = "rbd_trash_purge_schedule"
+ REFRESH_DELAY_SECONDS = 60.0
lock = Lock()
condition = Condition(lock)
try:
self.log.info("TrashPurgeScheduleHandler: starting")
while True:
- self.refresh_pools()
+ refresh_delay = self.refresh_pools()
with self.lock:
(ns_spec, wait_time) = self.dequeue()
if not ns_spec:
- self.condition.wait(min(wait_time, 60))
+ self.condition.wait(min(wait_time, refresh_delay))
continue
pool_id, namespace = ns_spec
self.trash_purge(pool_id, namespace)
with self.lock:
self.schedules = schedules
- def refresh_pools(self) -> None:
- if (datetime.now() - self.last_refresh_pools).seconds < 60:
- return
+ def refresh_pools(self) -> float:
+ elapsed = (datetime.now() - self.last_refresh_pools).total_seconds()
+ if elapsed < self.REFRESH_DELAY_SECONDS:
+ return self.REFRESH_DELAY_SECONDS - elapsed
self.log.debug("TrashPurgeScheduleHandler: refresh_pools")
self.pools = {}
self.queue = {}
self.last_refresh_pools = datetime.now()
- return
+ return self.REFRESH_DELAY_SECONDS
pools: Dict[str, Dict[str, str]] = {}
self.pools = pools
self.last_refresh_pools = datetime.now()
+ return self.REFRESH_DELAY_SECONDS
def load_pool(self, ioctx: rados.Ioctx, pools: Dict[str, Dict[str, str]]) -> None:
pool_id = str(ioctx.get_pool_id())