default=10 * 60,
desc='how frequently to perform a host check',
),
+ Option(
+ 'stray_daemon_check_interval',
+ type='secs',
+ default=30 * 60,
+ desc='how frequently cephadm should check for the presence of stray daemons',
+ ),
Option(
'mode',
type='str',
self.daemon_cache_timeout = 0
self.facts_cache_timeout = 0
self.host_check_interval = 0
+ self.stray_daemon_check_interval = 0
self.max_count_per_host = 0
self.mode = ''
self.container_image_base = ''
self.ceph_volume: CephVolume = CephVolume(self)
+ self.last_stray_daemon_check: Optional[datetime.datetime] = None
+
def shutdown(self) -> None:
self.log.debug('shutdown')
self._worker_pool.close()
-from datetime import datetime
+import datetime
import ipaddress
import hashlib
import json
def __init__(self, mgr: "CephadmOrchestrator"):
self.mgr: "CephadmOrchestrator" = mgr
self.log = logger
- self.last_certificates_check: Optional[datetime] = None
+ self.last_certificates_check: Optional[datetime.datetime] = None
def serve(self) -> None:
"""
self.mgr.facts_cache_timeout,
self.mgr.daemon_cache_timeout,
self.mgr.device_cache_timeout,
+ self.mgr.stray_daemon_check_interval,
)
)
self.log.debug('Sleeping for %d seconds', sleep_interval)
(self.mgr.scheduled_async_actions.pop(0))()
def _check_for_strays(self) -> None:
+ cutoff = datetime_now() - datetime.timedelta(seconds=self.mgr.stray_daemon_check_interval)
+ if self.mgr.last_stray_daemon_check is not None and self.mgr.last_stray_daemon_check >= cutoff:
+ return
self.log.debug('_check_for_strays')
for k in ['CEPHADM_STRAY_HOST',
'CEPHADM_STRAY_DAEMON']:
if self.mgr.warn_on_stray_daemons and daemon_detail:
self.mgr.set_health_warning(
'CEPHADM_STRAY_DAEMON', f'{len(daemon_detail)} stray daemon(s) not managed by cephadm', len(daemon_detail), daemon_detail)
+ self.mgr.last_stray_daemon_check = datetime_now()
def _service_reference_name(self, service_type: str, daemon_id: str) -> str:
if service_type not in ['rbd-mirror', 'cephfs-mirror', 'rgw', 'rgw-nfs']: