Log unhandled exceptions in worker
RPC calls to the worker use 'cast', so nothing is listening to find out the result. If an exception occurs we will never hear about it. This change logs such unhandled exceptions as errors. Change-Id: I51365a9dee8fd4eff85e77d3e42bf33be814a22c Partial-Bug: #1703043
This commit is contained in:
parent
1fff951639
commit
33a16aa7a8
@ -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
|
||||
|
||||
@ -36,6 +38,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.
|
||||
@ -147,6 +161,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.
|
||||
@ -182,6 +197,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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user