diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-01-29 09:50:04 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-01-29 09:50:04 +0000 |
commit | 747fb95173ca715749b1417471f71e758d26cf91 (patch) | |
tree | f5d056721f788880e4de036034330f9c90e442fd | |
parent | f6081d01878f0021a499f304c511b6e1e9c8f138 (diff) | |
parent | 6241f91d153c23e0ffdccd2ff623cdb4b16538a6 (diff) | |
download | nova-747fb95173ca715749b1417471f71e758d26cf91.tar.gz |
Merge "Fix to include error message in instance faults" into stable/folsom
-rw-r--r-- | nova/compute/utils.py | 7 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 29 |
2 files changed, 35 insertions, 1 deletions
diff --git a/nova/compute/utils.py b/nova/compute/utils.py index a8a0a65448..b3fef050d2 100644 --- a/nova/compute/utils.py +++ b/nova/compute/utils.py @@ -39,8 +39,13 @@ def add_instance_fault_from_exc(context, instance_uuid, fault, exc_info=None): """Adds the specified fault to the database.""" code = 500 + message = fault.__class__.__name__ + if hasattr(fault, "kwargs"): code = fault.kwargs.get('code', 500) + # get the message from the exception that was thrown + # if that does not exist, use the name of the exception class itself + message = fault.kwargs.get('value', message) details = unicode(fault) if exc_info and code == 500: @@ -50,7 +55,7 @@ def add_instance_fault_from_exc(context, instance_uuid, fault, exc_info=None): values = { 'instance_uuid': instance_uuid, 'code': code, - 'message': fault.__class__.__name__, + 'message': unicode(message), 'details': unicode(details), } db.instance_fault_create(context, values) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index e20f1c0fa9..a853849512 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -2343,6 +2343,35 @@ class ComputeTestCase(BaseTestCase): NotImplementedError('test'), exc_info) + def test_add_instance_fault_with_remote_error(self): + exc_info = None + instance_uuid = str(utils.gen_uuid()) + + def fake_db_fault_create(ctxt, values): + self.assertTrue(values['details'].startswith('Remote error')) + self.assertTrue('raise rpc_common.RemoteError' + in values['details']) + del values['details'] + + expected = { + 'code': 500, + 'instance_uuid': instance_uuid, + 'message': 'My Test Message' + } + self.assertEquals(expected, values) + + try: + raise rpc_common.RemoteError('test', 'My Test Message') + except rpc_common.RemoteError as exc: + exc_info = sys.exc_info() + + self.stubs.Set(nova.db, 'instance_fault_create', fake_db_fault_create) + + ctxt = context.get_admin_context() + compute_utils.add_instance_fault_from_exc(ctxt, instance_uuid, + exc, + exc_info) + def test_add_instance_fault_user_error(self): exc_info = None instance_uuid = str(utils.gen_uuid()) |