X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2872b6deb0d9e3d5fbfe0a172aa87949980dfe6f..5768e5a7559c22f86d89be65245b0d269f06cc6c:/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py diff --git a/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py b/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py index 2ae4fc8923..4848289e8b 100644 --- a/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py +++ b/services/nodemanager/arvnodeman/computenode/dispatch/__init__.py @@ -26,7 +26,7 @@ class ComputeNodeStateChangeBase(config.actor_class, RetryMixin): super(ComputeNodeStateChangeBase, self).__init__() RetryMixin.__init__(self, retry_wait, max_retry_wait, None, cloud_client, timer_actor) - self._later = self.actor_ref.proxy() + self._later = self.actor_ref.tell_proxy() self._arvados = arvados_client self.subscribers = set() @@ -37,14 +37,16 @@ class ComputeNodeStateChangeBase(config.actor_class, RetryMixin): self._set_logger() def _finished(self): - _notify_subscribers(self._later, self.subscribers) + if self.subscribers is None: + raise Exception("Actor tried to finish twice") + _notify_subscribers(self.actor_ref.proxy(), self.subscribers) self.subscribers = None self._logger.info("finished") def subscribe(self, subscriber): if self.subscribers is None: try: - subscriber(self._later) + subscriber(self.actor_ref.proxy()) except pykka.ActorDeadError: pass else: @@ -225,6 +227,7 @@ class ComputeNodeShutdownActor(ComputeNodeStateChangeBase): if not self._cloud.destroy_node(self.cloud_node): if self._cloud.broken(self.cloud_node): self._later.cancel_shutdown(self.NODE_BROKEN) + return else: # Force a retry. raise cloud_types.LibcloudError("destroy_node failed") @@ -304,7 +307,7 @@ class ComputeNodeMonitorActor(config.actor_class): boot_fail_after=1800 ): super(ComputeNodeMonitorActor, self).__init__() - self._later = self.actor_ref.proxy() + self._later = self.actor_ref.tell_proxy() self._last_log = None self._shutdowns = shutdown_timer self._cloud_node_fqdn = cloud_fqdn_func @@ -388,7 +391,7 @@ class ComputeNodeMonitorActor(config.actor_class): eligible = self.shutdown_eligible() if eligible is True: self._debug("Suggesting shutdown.") - _notify_subscribers(self._later, self.subscribers) + _notify_subscribers(self.actor_ref.proxy(), self.subscribers) elif self._shutdowns.window_open(): self._debug("Cannot shut down because %s", eligible) elif self.last_shutdown_opening != next_opening: @@ -403,7 +406,7 @@ class ComputeNodeMonitorActor(config.actor_class): first_ping_s = arvados_node.get('first_ping_at') if (self.arvados_node is not None) or (not first_ping_s): return None - elif ((arvados_node['ip_address'] in self.cloud_node.private_ips) and + elif ((arvados_node['info'].get('ec2_instance_id') == self._cloud.node_id(self.cloud_node)) and (arvados_timestamp(first_ping_s) >= self.cloud_node_start_time)): self._later.update_arvados_node(arvados_node) return self.cloud_node.id