self.event = Event()
self.mgr_listener = MgrListener(self)
self.device_enhanced_scan = False
+ self.recent_iteration_run_times: List[float] = [0.0, 0.0, 0.0]
+ self.recent_iteration_index: int = 0
def deploy_daemon_unit(self, config: Dict[str, str] = {}) -> None:
if not config:
ssl_ctx.load_verify_locations(self.ca_path)
while not self.stop:
+ start_time = time.monotonic()
ack = self.ack
try:
volume = self._ceph_volume(self.device_enhanced_scan)
except Exception as e:
logger.error(f'Failed to send metadata to mgr: {e}')
- self.event.wait(self.loop_interval)
+ end_time = time.monotonic()
+ run_time = datetime.timedelta(seconds=(end_time - start_time))
+ self.recent_iteration_run_times[self.recent_iteration_index] = run_time.total_seconds()
+ self.recent_iteration_index = (self.recent_iteration_index + 1) % 3
+ run_time_average = sum(self.recent_iteration_run_times, 0.0) / len([t for t in self.recent_iteration_run_times if t])
+
+ self.event.wait(max(self.loop_interval - int(run_time_average), 0))
self.event.clear()
def _ceph_volume(self, enhanced: bool = False) -> str: