8816: ComputeNodeUpdateActor._throttle_errors logs errors instead of re-throwing...
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 1 Apr 2016 17:11:51 +0000 (13:11 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 1 Apr 2016 17:11:51 +0000 (13:11 -0400)
services/nodemanager/arvnodeman/computenode/dispatch/__init__.py

index 4848289e8bfed1fbf253f7c8589a29e5c548051b..42960efeba4d758471710ece25919d4b7a915df2 100644 (file)
@@ -256,12 +256,6 @@ class ComputeNodeUpdateActor(config.actor_class):
     this to perform maintenance tasks on themselves.  Having a
     dedicated actor for this gives us the opportunity to control the
     flow of requests; e.g., by backing off when errors occur.
-
-    This actor is most like a "traditional" Pykka actor: there's no
-    subscribing, but instead methods return real driver results.  If
-    you're interested in those results, you should get them from the
-    Future that the proxy method returns.  Be prepared to handle exceptions
-    from the cloud driver when you do.
     """
     def __init__(self, cloud_factory, max_retry_wait=180):
         super(ComputeNodeUpdateActor, self).__init__()
@@ -270,6 +264,12 @@ class ComputeNodeUpdateActor(config.actor_class):
         self.error_streak = 0
         self.next_request_time = time.time()
 
+    def _set_logger(self):
+        self._logger = logging.getLogger("%s.%s" % (self.__class__.__name__, self.actor_urn[33:]))
+
+    def on_start(self):
+        self._set_logger()
+
     def _throttle_errors(orig_func):
         @functools.wraps(orig_func)
         def throttle_wrapper(self, *args, **kwargs):
@@ -283,7 +283,9 @@ class ComputeNodeUpdateActor(config.actor_class):
                 self.error_streak += 1
                 self.next_request_time += min(2 ** self.error_streak,
                                               self.max_retry_wait)
-                raise
+                self._logger.error(
+                    "Caught unknown error (no retry): %s",
+                    error, exc_info=error)
             else:
                 self.error_streak = 0
                 return result