diff --git a/buildman/manager/ephemeral.py b/buildman/manager/ephemeral.py index 73d5450d9..1e5575a05 100644 --- a/buildman/manager/ephemeral.py +++ b/buildman/manager/ephemeral.py @@ -68,7 +68,8 @@ class EphemeralBuilderManager(BaseManager): super(EphemeralBuilderManager, self).__init__(*args, **kwargs) - def _watch_etcd(self, etcd_key, change_callback, start_index=None, recursive=True): + def _watch_etcd(self, etcd_key, change_callback, start_index=None, recursive=True, + restarter=None): watch_task_key = (etcd_key, recursive) def callback_wrapper(changed_key_future): new_index = start_index @@ -97,10 +98,11 @@ class EphemeralBuilderManager(BaseManager): # TODO: Remove this hack once Etcd is fixed. logger.exception('Etcd moved forward too quickly. Restarting watch cycle.') new_index = None - async(self._register_existing_realms()) + if restarter is not None: + async(restarter()) if watch_task_key not in self._watch_tasks or self._watch_tasks[watch_task_key].done(): - self._watch_etcd(etcd_key, change_callback, start_index=new_index) + self._watch_etcd(etcd_key, change_callback, start_index=new_index, restarter=restarter) if etcd_result: change_callback(etcd_result) @@ -239,7 +241,8 @@ class EphemeralBuilderManager(BaseManager): self._watch_etcd(self._etcd_builder_prefix, self._handle_builder_expiration) self._etcd_realm_prefix = self._manager_config.get('ETCD_REALM_PREFIX', 'realm/') - self._watch_etcd(self._etcd_realm_prefix, self._handle_realm_change) + self._watch_etcd(self._etcd_realm_prefix, self._handle_realm_change, + restarter=self._register_existing_realms) self._etcd_lock_prefix = self._manager_config.get('ETCD_LOCK_PREFIX', 'locks/')