diff options
Diffstat (limited to 'heat/engine/worker.py')
-rw-r--r-- | heat/engine/worker.py | 16 |
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. |