5824: Log actual client IP address (along with X-Forwarded-For header, if any).
[arvados.git] / services / nodemanager / arvnodeman / daemon.py
index 30592abe87c37d5f87f5732fd703c1ca82e027d3..1d52073ce5ff7a362e0b8e9cc13b12c0f2d3b6a2 100644 (file)
@@ -182,9 +182,14 @@ class NodeManagerDaemonActor(actor_class):
                     self._pair_nodes(record, arv_rec.arvados_node)
                     break
         for key, record in self.cloud_nodes.orphans.iteritems():
+            if key in self.shutdowns:
+                try:
+                    self.shutdowns[key].stop().get()
+                except pykka.ActorDeadError:
+                    pass
+                del self.shutdowns[key]
             record.actor.stop()
             record.cloud_node = None
-            self.shutdowns.pop(key, None)
 
     def update_arvados_nodes(self, nodelist):
         self._update_poll_time('arvados_nodes')
@@ -212,7 +217,8 @@ class NodeManagerDaemonActor(actor_class):
     def _nodes_missing(self):
         return sum(1 for arv_node in
                    pykka.get_all(rec.actor.arvados_node for rec in
-                                 self.cloud_nodes.nodes.itervalues())
+                                 self.cloud_nodes.nodes.itervalues()
+                                 if rec.actor.cloud_node.get().id not in self.shutdowns)
                    if arv_node and cnode.arvados_node_missing(arv_node, self.node_stale_after))
 
     def _nodes_wanted(self):
@@ -228,7 +234,7 @@ class NodeManagerDaemonActor(actor_class):
             return len(self.last_wishlist) - up_count
 
     def _nodes_excess(self):
-        up_count = self._nodes_up() - len(self.shutdowns) - self._nodes_missing()
+        up_count = self._nodes_up() - len(self.shutdowns)
         over_min = up_count - self.min_nodes
         if over_min <= 0:
             return over_min