From: Peter Amstutz Date: Mon, 16 Jul 2018 18:54:35 +0000 (-0400) Subject: 13822: Don't call list_sizes() in cloud client constructor. X-Git-Tag: 1.2.0~75^2~1 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/83d08d7ccbc622ec97948929c83fb91f96743ca2 13822: Don't call list_sizes() in cloud client constructor. Also make subscribe() call to SetupActor asynchronous. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- diff --git a/services/nodemanager/arvnodeman/computenode/driver/__init__.py b/services/nodemanager/arvnodeman/computenode/driver/__init__.py index 7ed7435553..22ffa24079 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/__init__.py +++ b/services/nodemanager/arvnodeman/computenode/driver/__init__.py @@ -35,8 +35,10 @@ class BaseComputeNodeDriver(RetryMixin): return driver_class(**auth_kwargs) @RetryMixin._retry() - def _set_sizes(self): - self.sizes = {sz.id: sz for sz in self.real.list_sizes()} + def sizes(self): + if self._sizes is None: + self._sizes = {sz.id: sz for sz in self.real.list_sizes()} + return self._sizes def __init__(self, auth_kwargs, list_kwargs, create_kwargs, driver_class, retry_wait=1, max_retry_wait=180): @@ -73,7 +75,7 @@ class BaseComputeNodeDriver(RetryMixin): if new_pair is not None: self.create_kwargs[new_pair[0]] = new_pair[1] - self._set_sizes() + self._sizes = None def _init_ping_host(self, ping_host): self.ping_host = ping_host diff --git a/services/nodemanager/arvnodeman/computenode/driver/azure.py b/services/nodemanager/arvnodeman/computenode/driver/azure.py index e0f260ab86..aa8f3c7695 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/azure.py +++ b/services/nodemanager/arvnodeman/computenode/driver/azure.py @@ -87,7 +87,7 @@ echo %s > /var/tmp/arv-node-data/meta-data/instance-type for n in nodes: # Need to populate Node.size if not n.size: - n.size = self.sizes[n.extra["properties"]["hardwareProfile"]["vmSize"]] + n.size = self.sizes()[n.extra["properties"]["hardwareProfile"]["vmSize"]] return nodes def broken(self, cloud_node): diff --git a/services/nodemanager/arvnodeman/computenode/driver/dummy.py b/services/nodemanager/arvnodeman/computenode/driver/dummy.py index 2829b9c0b1..14845ac12f 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/dummy.py +++ b/services/nodemanager/arvnodeman/computenode/driver/dummy.py @@ -41,7 +41,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver): nodelist = super(ComputeNodeDriver, self).list_nodes() for node in nodelist: self._ensure_private_ip(node) - node.size = self.sizes["1"] + node.size = self.sizes()["1"] return nodelist def create_node(self, size, arvados_node): diff --git a/services/nodemanager/arvnodeman/computenode/driver/ec2.py b/services/nodemanager/arvnodeman/computenode/driver/ec2.py index 9300645c38..07ed90dfa5 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/ec2.py +++ b/services/nodemanager/arvnodeman/computenode/driver/ec2.py @@ -102,7 +102,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver): nodes = super(ComputeNodeDriver, self).list_nodes() for n in nodes: if not n.size: - n.size = self.sizes[n.extra["instance_type"]] + n.size = self.sizes()[n.extra["instance_type"]] return nodes @classmethod diff --git a/services/nodemanager/arvnodeman/computenode/driver/gce.py b/services/nodemanager/arvnodeman/computenode/driver/gce.py index 3f1d575361..f1238db403 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/gce.py +++ b/services/nodemanager/arvnodeman/computenode/driver/gce.py @@ -38,7 +38,6 @@ class ComputeNodeDriver(BaseComputeNodeDriver): super(ComputeNodeDriver, self).__init__( auth_kwargs, list_kwargs, create_kwargs, driver_class) - self._sizes_by_id = {sz.id: sz for sz in self.sizes.itervalues()} self._disktype_links = {dt.name: self._object_link(dt) for dt in self.real.ex_list_disktypes()} @@ -120,7 +119,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver): # and monkeypatch the results when that's the case. if nodelist and not hasattr(nodelist[0].size, 'id'): for node in nodelist: - node.size = self._sizes_by_id[node.size] + node.size = self.sizes()[node.size] return nodelist @classmethod diff --git a/services/nodemanager/arvnodeman/daemon.py b/services/nodemanager/arvnodeman/daemon.py index 1b9f1e70cc..0d6fdfca9a 100644 --- a/services/nodemanager/arvnodeman/daemon.py +++ b/services/nodemanager/arvnodeman/daemon.py @@ -398,14 +398,14 @@ class NodeManagerDaemonActor(actor_class): arvados_client=self._new_arvados(), arvados_node=arvados_node, cloud_client=self._new_cloud(), - cloud_size=self.server_calculator.find_size(cloud_size.id)).proxy() - self.booting[new_setup.actor_ref.actor_urn] = new_setup - self.sizes_booting[new_setup.actor_ref.actor_urn] = cloud_size + cloud_size=self.server_calculator.find_size(cloud_size.id)) + self.booting[new_setup.actor_urn] = new_setup.proxy() + self.sizes_booting[new_setup.actor_urn] = cloud_size if arvados_node is not None: self.arvados_nodes[arvados_node['uuid']].assignment_time = ( time.time()) - new_setup.subscribe(self._later.node_setup_finished) + new_setup.tell_proxy().subscribe(self._later.node_setup_finished) if nodes_wanted > 1: self._later.start_node(cloud_size)