diff options
| author | Alex Meade <alex.meade@rackspace.com> | 2012-05-03 14:29:50 -0400 |
|---|---|---|
| committer | Alex Meade <alex.meade@rackspace.com> | 2012-05-07 10:38:28 -0400 |
| commit | 2f552e957fddcd9e042a09a2d32d32fa564c18e7 (patch) | |
| tree | ba2914fb539f0143e90cb3fbb921cb67623f4762 /nova/exception.py | |
| parent | eb9e54c1129080ad0f5b569b39dfa09c539f2f11 (diff) | |
Replaces exceptions.Error with NovaException
Fixes bug 817107
Change-Id: I6253e6bbcc44676c587b315fa32afba6459e676a
Diffstat (limited to 'nova/exception.py')
| -rw-r--r-- | nova/exception.py | 97 |
1 files changed, 45 insertions, 52 deletions
diff --git a/nova/exception.py b/nova/exception.py index df2f79e3d..e2760b68d 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -31,6 +31,7 @@ import sys import webob.exc from nova import log as logging +from nova.openstack.common import excutils LOG = logging.getLogger(__name__) @@ -62,28 +63,6 @@ class ProcessExecutionError(IOError): IOError.__init__(self, message) -class Error(Exception): - pass - - -class EC2APIError(Error): - def __init__(self, message='Unknown', code=None): - self.msg = message - self.code = code - if code: - outstr = '%s: %s' % (code, message) - else: - outstr = '%s' % message - super(EC2APIError, self).__init__(outstr) - - -class DBError(Error): - """Wraps an implementation specific exception.""" - def __init__(self, inner_exception=None): - self.inner_exception = inner_exception - super(DBError, self).__init__(str(inner_exception)) - - def wrap_db_error(f): def _wrap(*args, **kwargs): try: @@ -113,36 +92,30 @@ def wrap_exception(notifier=None, publisher_id=None, event_type=None, try: return f(*args, **kw) except Exception, e: - # Save exception since it can be clobbered during processing - # below before we can re-raise - exc_info = sys.exc_info() - - if notifier: - payload = dict(args=args, exception=e) - payload.update(kw) - - # Use a temp vars so we don't shadow - # our outer definitions. - temp_level = level - if not temp_level: - temp_level = notifier.ERROR - - temp_type = event_type - if not temp_type: - # If f has multiple decorators, they must use - # functools.wraps to ensure the name is - # propagated. - temp_type = f.__name__ - - context = get_context_from_function_and_args(f, - args, - kw) - - notifier.notify(context, publisher_id, temp_type, - temp_level, payload) - - # re-raise original exception since it may have been clobbered - raise exc_info[0], exc_info[1], exc_info[2] + with excutils.save_and_reraise_exception(): + if notifier: + payload = dict(args=args, exception=e) + payload.update(kw) + + # Use a temp vars so we don't shadow + # our outer definitions. + temp_level = level + if not temp_level: + temp_level = notifier.ERROR + + temp_type = event_type + if not temp_type: + # If f has multiple decorators, they must use + # functools.wraps to ensure the name is + # propagated. + temp_type = f.__name__ + + context = get_context_from_function_and_args(f, + args, + kw) + + notifier.notify(context, publisher_id, temp_type, + temp_level, payload) return functools.wraps(f)(wrapped) return inner @@ -183,6 +156,26 @@ class NovaException(Exception): super(NovaException, self).__init__(message) +class EC2APIError(NovaException): + message = _("Unknown") + + def __init__(self, message=None, code=None): + self.msg = message + self.code = code + if code: + outstr = '%s: %s' % (code, message) + else: + outstr = '%s' % message + super(EC2APIError, self).__init__(outstr) + + +class DBError(NovaException): + """Wraps an implementation specific exception.""" + def __init__(self, inner_exception=None): + self.inner_exception = inner_exception + super(DBError, self).__init__(str(inner_exception)) + + class DecryptionFailure(NovaException): message = _("Failed to decrypt text") |
