projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
13822: Don't call list_sizes() in cloud client constructor.
[arvados.git]
/
services
/
nodemanager
/
arvnodeman
/
computenode
/
driver
/
__init__.py
diff --git
a/services/nodemanager/arvnodeman/computenode/driver/__init__.py
b/services/nodemanager/arvnodeman/computenode/driver/__init__.py
index 8f881b04e35341a738b19e1d233d0e851166c9db..22ffa24079b6d32ea05a6d7daa9dc3aab777f867 100644
(file)
--- a/
services/nodemanager/arvnodeman/computenode/driver/__init__.py
+++ b/
services/nodemanager/arvnodeman/computenode/driver/__init__.py
@@
-12,6
+12,7
@@
import libcloud.common.types as cloud_types
from libcloud.compute.base import NodeDriver, NodeAuthSSHKey
from ...config import CLOUD_ERRORS
from libcloud.compute.base import NodeDriver, NodeAuthSSHKey
from ...config import CLOUD_ERRORS
+from ...status import tracker
from .. import RetryMixin
class BaseComputeNodeDriver(RetryMixin):
from .. import RetryMixin
class BaseComputeNodeDriver(RetryMixin):
@@
-34,8
+35,10
@@
class BaseComputeNodeDriver(RetryMixin):
return driver_class(**auth_kwargs)
@RetryMixin._retry()
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):
def __init__(self, auth_kwargs, list_kwargs, create_kwargs,
driver_class, retry_wait=1, max_retry_wait=180):
@@
-72,7
+75,7
@@
class BaseComputeNodeDriver(RetryMixin):
if new_pair is not None:
self.create_kwargs[new_pair[0]] = new_pair[1]
if new_pair is not None:
self.create_kwargs[new_pair[0]] = new_pair[1]
- self._s
et_sizes()
+ self._s
izes = None
def _init_ping_host(self, ping_host):
self.ping_host = ping_host
def _init_ping_host(self, ping_host):
self.ping_host = ping_host
@@
-123,7
+126,11
@@
class BaseComputeNodeDriver(RetryMixin):
def list_nodes(self, **kwargs):
l = self.list_kwargs.copy()
l.update(kwargs)
def list_nodes(self, **kwargs):
l = self.list_kwargs.copy()
l.update(kwargs)
- return self.real.list_nodes(**l)
+ try:
+ return self.real.list_nodes(**l)
+ except CLOUD_ERRORS:
+ tracker.counter_add('list_nodes_errors')
+ raise
def create_cloud_name(self, arvados_node):
"""Return a cloud node name for the given Arvados node record.
def create_cloud_name(self, arvados_node):
"""Return a cloud node name for the given Arvados node record.
@@
-181,6
+188,7
@@
class BaseComputeNodeDriver(RetryMixin):
try:
return self.search_for_now(kwargs['name'], 'list_nodes', self._name_key)
except ValueError:
try:
return self.search_for_now(kwargs['name'], 'list_nodes', self._name_key)
except ValueError:
+ tracker.counter_add('create_node_errors')
raise create_error
def post_create_node(self, cloud_node):
raise create_error
def post_create_node(self, cloud_node):
@@
-211,7
+219,7
@@
class BaseComputeNodeDriver(RetryMixin):
def destroy_node(self, cloud_node):
try:
return self.real.destroy_node(cloud_node)
def destroy_node(self, cloud_node):
try:
return self.real.destroy_node(cloud_node)
- except CLOUD_ERRORS
as destroy_error
:
+ except CLOUD_ERRORS:
# Sometimes the destroy node request succeeds but times out and
# raises an exception instead of returning success. If this
# happens, we get a noisy stack trace. Check if the node is still
# Sometimes the destroy node request succeeds but times out and
# raises an exception instead of returning success. If this
# happens, we get a noisy stack trace. Check if the node is still
@@
-223,6
+231,7
@@
class BaseComputeNodeDriver(RetryMixin):
# it, which means destroy_node actually succeeded.
return True
# The node is still on the list. Re-raise.
# it, which means destroy_node actually succeeded.
return True
# The node is still on the list. Re-raise.
+ tracker.counter_add('destroy_node_errors')
raise
# Now that we've defined all our own methods, delegate generic, public
raise
# Now that we've defined all our own methods, delegate generic, public