Skip to content

Commit 89b9880

Browse files
RoiGlinikarikalon1
andauthored
ROB-1323 cluster status init crash take 2 (#1835)
* emit event when config load is done * call status and discover cluster after config is done * change event on config reload * change event on config reload * just check if thread attribute exists --------- Co-authored-by: arik <alon.arik@gmail.com>
1 parent a3d72f5 commit 89b9880

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/robusta/core/sinks/robusta/robusta_sink.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ def __init__(self, sink_config: RobustaSinkConfigWrapper, registry):
8686
)
8787
self.__rrm_checker = RRM(dal=self.dal, cluster=self.cluster_name, account_id=self.account_id)
8888
self.__pods_running_count: int = 0
89-
self.__update_cluster_status() # send runner version initially, then force prometheus alert time periodically.
9089

9190
self.registry.subscribe("scan_updated", self)
91+
self.registry.subscribe("config_reload", self)
9292

9393
# start cluster discovery
9494
self.__active = True
@@ -101,14 +101,14 @@ def __init__(self, sink_config: RobustaSinkConfigWrapper, registry):
101101
self.__jobs_cache_initialized: bool = False
102102
self.__helm_releases_cache: Optional[Dict[str, HelmRelease]] = None
103103
self.__init_service_resolver()
104-
self.__thread = threading.Thread(target=self.__discover_cluster)
105104
self.__watchdog_thread = threading.Thread(target=self.__discovery_watchdog)
106-
self.__thread.start()
107105
self.__watchdog_thread.start()
108106

109107
def handle_event(self, event_name: str, **kwargs):
110108
if event_name == "scan_updated":
111109
self._on_scan_updated(**kwargs)
110+
elif event_name == "config_reload":
111+
self._on_config_reload(**kwargs)
112112
else:
113113
logging.warning("RobustaSink subscriber called with unknown event")
114114

@@ -120,6 +120,14 @@ def _on_scan_updated(
120120

121121
self.dal.set_scan_state(scan_id, state, metadata)
122122

123+
def _on_config_reload(self) -> None:
124+
# make sure cluster status and periodic check start after all config has been reloaded successfuly.
125+
self.__update_cluster_status() # send runner version initially, then force prometheus alert time periodically.
126+
127+
if not hasattr(self, '_thread'):
128+
self._thread = threading.Thread(target=self.__discover_cluster, daemon=True)
129+
self._thread.start()
130+
123131
def set_cluster_active(self, active: bool):
124132
self.dal.set_cluster_active(active)
125133

src/robusta/runner/config_loader.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,17 @@ def __init__(
6464
self.event_handler = event_handler
6565
self.root_playbook_path = PLAYBOOKS_ROOT
6666
self.reload_lock = threading.RLock()
67-
self.watcher = FileSystemWatcher(self.root_playbook_path, self.__reload_playbook_packages)
68-
self.conf_watcher = FileSystemWatcher(self.config_file_path, self.__reload_playbook_packages)
69-
self.__reload_playbook_packages("initialization")
67+
self.watcher = FileSystemWatcher(self.root_playbook_path, self.reload)
68+
self.conf_watcher = FileSystemWatcher(self.config_file_path, self.reload)
69+
self.reload("initialization")
7070

7171
def close(self):
7272
self.watcher.stop_watcher()
7373
self.conf_watcher.stop_watcher()
7474

7575
def reload(self, description: str):
7676
self.__reload_playbook_packages(description)
77+
self.registry.get_event_emitter().emit_event("config_reload")
7778

7879
def __reload_scheduler(self, playbooks_registry: PlaybooksRegistry):
7980
scheduler = self.registry.get_scheduler()

0 commit comments

Comments
 (0)