summaryrefslogtreecommitdiff
path: root/heat/engine/worker.py
diff options
context:
space:
mode:
Diffstat (limited to 'heat/engine/worker.py')
-rw-r--r--heat/engine/worker.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/heat/engine/worker.py b/heat/engine/worker.py
index a72fa73e6..ba008f694 100644
--- a/heat/engine/worker.py
+++ b/heat/engine/worker.py
@@ -14,9 +14,11 @@
# limitations under the License.
import eventlet.queue
+import functools
from oslo_log import log as logging
import oslo_messaging
+from oslo_utils import excutils
from oslo_utils import uuidutils
from osprofiler import profiler
@@ -38,6 +40,18 @@ LOG = logging.getLogger(__name__)
CANCEL_RETRIES = 3
+def log_exceptions(func):
+ @functools.wraps(func)
+ def exception_wrapper(*args, **kwargs):
+ try:
+ return func(*args, **kwargs)
+ except Exception:
+ with excutils.save_and_reraise_exception():
+ LOG.exception('Unhandled exception in %s', func.__name__)
+
+ return exception_wrapper
+
+
@profiler.trace_cls("rpc")
class WorkerService(object):
"""Service that has 'worker' actor in convergence.
@@ -150,6 +164,7 @@ class WorkerService(object):
stack)
@context.request_context
+ @log_exceptions
def check_resource(self, cnxt, resource_id, current_traversal, data,
is_update, adopt_stack_data):
"""Process a node in the dependency graph.
@@ -183,6 +198,7 @@ class WorkerService(object):
stack.id, msg_queue)
@context.request_context
+ @log_exceptions
def cancel_check_resource(self, cnxt, stack_id):
"""Cancel check_resource for given stack.