summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-01-17 12:11:37 -0500
committerDan Smith <danms@us.ibm.com>2013-01-29 11:22:20 -0500
commitd70d2f374d24b40dc7890b5dc2431dd73bde97ad (patch)
treedb791f94db02e18063175986b3a387d86772536d
parent98390d80665e4522c2ec749aee738b087a576702 (diff)
downloadnova-d70d2f374d24b40dc7890b5dc2431dd73bde97ad.tar.gz
nova-d70d2f374d24b40dc7890b5dc2431dd73bde97ad.tar.xz
nova-d70d2f374d24b40dc7890b5dc2431dd73bde97ad.zip
Add instance_fault_create() to conductor
This moves the use of db.instance_fault_create() from the compute utils to conductor. Related to blueprint no-db-compute Change-Id: If089ce1623374a259a2d63a99befc46fa3a130b6
-rw-r--r--nova/compute/manager.py13
-rw-r--r--nova/compute/utils.py5
-rw-r--r--nova/conductor/api.py6
-rw-r--r--nova/conductor/manager.py6
-rw-r--r--nova/conductor/rpcapi.py5
-rw-r--r--nova/tests/compute/test_compute.py24
-rw-r--r--nova/tests/conductor/test_conductor.py9
7 files changed, 51 insertions, 17 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 275611cdf..6365a548c 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -229,7 +229,8 @@ def wrap_instance_fault(function):
with excutils.save_and_reraise_exception():
compute_utils.add_instance_fault_from_exc(context,
- kwargs['instance'], e, sys.exc_info())
+ self.conductor_api, kwargs['instance'],
+ e, sys.exc_info())
return decorated_function
@@ -732,8 +733,8 @@ class ComputeManager(manager.SchedulerDependentManager):
instance_uuid = instance['uuid']
rescheduled = False
- compute_utils.add_instance_fault_from_exc(context, instance,
- exc_info[1], exc_info=exc_info)
+ compute_utils.add_instance_fault_from_exc(context, self.conductor_api,
+ instance, exc_info[1], exc_info=exc_info)
try:
self._deallocate_network(context, instance)
@@ -1465,7 +1466,7 @@ class ComputeManager(manager.SchedulerDependentManager):
LOG.error(_('Cannot reboot instance: %(exc)s'), locals(),
context=context, instance=instance)
compute_utils.add_instance_fault_from_exc(context,
- instance, exc, sys.exc_info())
+ self.conductor_api, instance, exc, sys.exc_info())
# Fall through and reset task_state to None
current_power_state = self._get_power_state(context, instance)
@@ -1995,8 +1996,8 @@ class ComputeManager(manager.SchedulerDependentManager):
rescheduled = False
instance_uuid = instance['uuid']
- compute_utils.add_instance_fault_from_exc(context, instance,
- exc_info[0], exc_info=exc_info)
+ compute_utils.add_instance_fault_from_exc(context, self.conductor_api,
+ instance, exc_info[0], exc_info=exc_info)
try:
scheduler_method = self.scheduler_rpcapi.prep_resize
diff --git a/nova/compute/utils.py b/nova/compute/utils.py
index 1874e886f..daf80874c 100644
--- a/nova/compute/utils.py
+++ b/nova/compute/utils.py
@@ -37,7 +37,8 @@ CONF.import_opt('host', 'nova.netconf')
LOG = log.getLogger(__name__)
-def add_instance_fault_from_exc(context, instance, fault, exc_info=None):
+def add_instance_fault_from_exc(context, conductor,
+ instance, fault, exc_info=None):
"""Adds the specified fault to the database."""
code = 500
@@ -61,7 +62,7 @@ def add_instance_fault_from_exc(context, instance, fault, exc_info=None):
'details': unicode(details),
'host': CONF.host
}
- db.instance_fault_create(context, values)
+ conductor.instance_fault_create(context, values)
def get_device_name_for_instance(context, instance, bdms, device):
diff --git a/nova/conductor/api.py b/nova/conductor/api.py
index d05c94877..b0e5afdcb 100644
--- a/nova/conductor/api.py
+++ b/nova/conductor/api.py
@@ -133,6 +133,9 @@ class LocalAPI(object):
def instance_type_get(self, context, instance_type_id):
return self._manager.instance_type_get(context, instance_type_id)
+ def instance_fault_create(self, context, values):
+ return self._manager.instance_fault_create(context, values)
+
def migration_get(self, context, migration_id):
return self._manager.migration_get(context, migration_id)
@@ -391,6 +394,9 @@ class API(object):
return self.conductor_rpcapi.instance_type_get(context,
instance_type_id)
+ def instance_fault_create(self, context, values):
+ return self.conductor_rpcapi.instance_fault_create(context, values)
+
def migration_get(self, context, migration_id):
return self.conductor_rpcapi.migration_get(context, migration_id)
diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py
index 87b143912..c4ae33622 100644
--- a/nova/conductor/manager.py
+++ b/nova/conductor/manager.py
@@ -43,7 +43,7 @@ datetime_fields = ['launched_at', 'terminated_at']
class ConductorManager(manager.SchedulerDependentManager):
"""Mission: TBD."""
- RPC_API_VERSION = '1.35'
+ RPC_API_VERSION = '1.36'
def __init__(self, *args, **kwargs):
super(ConductorManager, self).__init__(service_name='conductor',
@@ -258,6 +258,10 @@ class ConductorManager(manager.SchedulerDependentManager):
result = self.db.instance_type_get(context, instance_type_id)
return jsonutils.to_primitive(result)
+ def instance_fault_create(self, context, values):
+ result = self.db.instance_fault_create(context, values)
+ return jsonutils.to_primitive(result)
+
def vol_get_usage_by_time(self, context, start_time):
result = self.db.vol_get_usage_by_time(context, start_time)
return jsonutils.to_primitive(result)
diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py
index 1699c85ed..04e576cce 100644
--- a/nova/conductor/rpcapi.py
+++ b/nova/conductor/rpcapi.py
@@ -68,6 +68,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
1.33 - Added compute_node_create and compute_node_update
1.34 - Added service_update
1.35 - Added instance_get_active_by_window_joined
+ 1.36 - Added instance_fault_create
"""
BASE_RPC_API_VERSION = '1.0'
@@ -293,6 +294,10 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
msg = self.make_msg('instance_get_all_by_host', host=host, node=node)
return self.call(context, msg, version='1.32')
+ def instance_fault_create(self, context, values):
+ msg = self.make_msg('instance_fault_create', values=values)
+ return self.call(context, msg, version='1.36')
+
def action_event_start(self, context, values):
msg = self.make_msg('action_event_start', values=values)
return self.call(context, msg, version='1.25')
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index dc381d800..be0f6740a 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -2722,8 +2722,11 @@ class ComputeTestCase(BaseTestCase):
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,
- NotImplementedError('test'), exc_info)
+ compute_utils.add_instance_fault_from_exc(ctxt,
+ self.compute.conductor_api,
+ instance,
+ NotImplementedError('test'),
+ exc_info)
def test_add_instance_fault_with_remote_error(self):
instance = self._create_fake_instance()
@@ -2751,8 +2754,8 @@ class ComputeTestCase(BaseTestCase):
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, exc,
- exc_info)
+ compute_utils.add_instance_fault_from_exc(ctxt,
+ self.compute.conductor_api, instance, exc, exc_info)
def test_add_instance_fault_user_error(self):
instance = self._create_fake_instance()
@@ -2779,8 +2782,8 @@ class ComputeTestCase(BaseTestCase):
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, user_exc,
- exc_info)
+ compute_utils.add_instance_fault_from_exc(ctxt,
+ self.compute.conductor_api, instance, user_exc, exc_info)
def test_add_instance_fault_no_exc_info(self):
instance = self._create_fake_instance()
@@ -2798,8 +2801,10 @@ class ComputeTestCase(BaseTestCase):
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,
- NotImplementedError('test'))
+ compute_utils.add_instance_fault_from_exc(ctxt,
+ self.compute.conductor_api,
+ instance,
+ NotImplementedError('test'))
def test_cleanup_running_deleted_instances(self):
admin_context = context.get_admin_context()
@@ -6752,6 +6757,7 @@ class ComputeRescheduleOrReraiseTestCase(BaseTestCase):
exc_info = sys.exc_info()
compute_utils.add_instance_fault_from_exc(self.context,
+ self.compute.conductor_api,
self.instance, exc_info[0], exc_info=exc_info)
self.compute._deallocate_network(self.context,
self.instance).AndRaise(InnerTestingException("Error"))
@@ -6802,6 +6808,7 @@ class ComputeRescheduleOrReraiseTestCase(BaseTestCase):
except Exception:
exc_info = sys.exc_info()
compute_utils.add_instance_fault_from_exc(self.context,
+ self.compute.conductor_api,
self.instance, exc_info[0], exc_info=exc_info)
self.compute._deallocate_network(self.context,
self.instance)
@@ -6830,6 +6837,7 @@ class ComputeRescheduleOrReraiseTestCase(BaseTestCase):
exc_info = sys.exc_info()
compute_utils.add_instance_fault_from_exc(self.context,
+ self.compute.conductor_api,
self.instance, exc_info[0], exc_info=exc_info)
self.compute._deallocate_network(self.context,
self.instance)
diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py
index 30d176bbd..c46663e50 100644
--- a/nova/tests/conductor/test_conductor.py
+++ b/nova/tests/conductor/test_conductor.py
@@ -426,6 +426,15 @@ class _BaseTestCase(object):
'fake-values', False)
self.assertEqual(result, 'fake-result')
+ def test_instance_fault_create(self):
+ self.mox.StubOutWithMock(db, 'instance_fault_create')
+ db.instance_fault_create(self.context, 'fake-values').AndReturn(
+ 'fake-result')
+ self.mox.ReplayAll()
+ result = self.conductor.instance_fault_create(self.context,
+ 'fake-values')
+ self.assertEqual(result, 'fake-result')
+
class ConductorTestCase(_BaseTestCase, test.TestCase):
"""Conductor Manager Tests."""