summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-29 09:50:04 +0000
committerGerrit Code Review <review@openstack.org>2013-01-29 09:50:04 +0000
commit747fb95173ca715749b1417471f71e758d26cf91 (patch)
treef5d056721f788880e4de036034330f9c90e442fd
parentf6081d01878f0021a499f304c511b6e1e9c8f138 (diff)
parent6241f91d153c23e0ffdccd2ff623cdb4b16538a6 (diff)
downloadnova-747fb95173ca715749b1417471f71e758d26cf91.tar.gz
Merge "Fix to include error message in instance faults" into stable/folsom
-rw-r--r--nova/compute/utils.py7
-rw-r--r--nova/tests/compute/test_compute.py29
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())