return (record for record in self.nodes.itervalues()
if getattr(record, self.PAIR_ATTR) is None)
- def paired(self):
- return (record for record in self.nodes.itervalues()
- if getattr(record, self.PAIR_ATTR) is not None)
-
class _CloudNodeTracker(_BaseNodeTracker):
RECORD_ATTR = 'cloud_node'
@_check_poll_freshness
def node_can_shutdown(self, node_actor):
if self._nodes_excess(node_actor.cloud_node.get().size) > 0:
- print("excess")
self._begin_node_shutdown(node_actor, cancellable=True)
elif self.cloud_nodes.nodes.get(node_actor.cloud_node.get().id).arvados_node is None:
# Node is unpaired, which means it probably exceeded its booting
# grace period without a ping, so shut it down so we can boot a new
# node in its place.
- print("unpaired")
self._begin_node_shutdown(node_actor, cancellable=False)
elif node_actor.in_state('down').get():
# Node is down and unlikely to come back.
self._begin_node_shutdown(node_actor, cancellable=False)
def node_finished_shutdown(self, shutdown_actor):
- cloud_node, success, cancel_reason = self._get_actor_attrs(
- shutdown_actor, 'cloud_node', 'success', 'cancel_reason')
+ try:
+ cloud_node, success, cancel_reason = self._get_actor_attrs(
+ shutdown_actor, 'cloud_node', 'success', 'cancel_reason')
+ except pykka.ActorDeadError:
+ return
cloud_node_id = cloud_node.id
record = self.cloud_nodes[cloud_node_id]
shutdown_actor.stop()