summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-11-29 00:57:57 +0000
committerGerrit Code Review <review@openstack.org>2012-11-29 00:57:57 +0000
commitd6fd1b2a9b6f47c124ce98d314e2f4adecda0958 (patch)
treee36947bb8ce7b8e35a2f6c34b4b98287462dfb71
parent0666348b033b1838eef37c0f7e9db0d9e7bcb03a (diff)
parent19307bb1580db0d4205659b61c76cae1cab56bf7 (diff)
Merge "Make compute manager use conductor for instance_gets"
-rw-r--r--nova/compute/manager.py16
-rw-r--r--nova/conductor/api.py13
-rw-r--r--nova/conductor/manager.py10
-rw-r--r--nova/conductor/rpcapi.py10
-rw-r--r--nova/tests/conductor/test_conductor.py14
5 files changed, 55 insertions, 8 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 99637fd65..c32d6e343 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -258,10 +258,12 @@ class ComputeVirtAPI(virtapi.VirtAPI):
**updates)
def instance_get_by_uuid(self, context, instance_uuid):
- return self._compute.db.instance_get_by_uuid(context, instance_uuid)
+ return self._compute.conductor_api.instance_get_by_uuid(
+ context, instance_uuid)
def instance_get_all_by_host(self, context, host):
- return self._compute.db.instance_get_all_by_host(context, host)
+ return self._compute.conductor_api.instance_get_all_by_host(
+ context, host)
def aggregate_get_by_host(self, context, host, key=None):
return self._compute.db.aggregate_get_by_host(context, host, key=key)
@@ -2744,7 +2746,7 @@ class ComputeManager(manager.SchedulerDependentManager):
while not instance or instance['host'] != self.host:
if instance_uuids:
try:
- instance = self.db.instance_get_by_uuid(context,
+ instance = self.conductor_api.instance_get_by_uuid(context,
instance_uuids.pop(0))
except exception.InstanceNotFound:
# Instance is gone. Try to grab another.
@@ -2813,8 +2815,8 @@ class ComputeManager(manager.SchedulerDependentManager):
"%(migration_id)s for instance %(instance_uuid)s"),
locals())
try:
- instance = self.db.instance_get_by_uuid(context,
- instance_uuid)
+ instance = self.conductor_api.instance_get_by_uuid(
+ context, instance_uuid)
except exception.InstanceNotFound:
reason = _("Instance %(instance_uuid)s not found")
_set_migration_to_error(migration, reason % locals())
@@ -3006,8 +3008,8 @@ class ComputeManager(manager.SchedulerDependentManager):
# for example, because of a broken libvirt driver.
# We re-query the DB to get the latest instance info to minimize
# (not eliminate) race condition.
- u = self.db.instance_get_by_uuid(context,
- db_instance['uuid'])
+ u = self.conductor_api.instance_get_by_uuid(context,
+ db_instance['uuid'])
db_power_state = u["power_state"]
vm_state = u['vm_state']
if self.host != u['host']:
diff --git a/nova/conductor/api.py b/nova/conductor/api.py
index 43d8fd0bc..7a0ae5c23 100644
--- a/nova/conductor/api.py
+++ b/nova/conductor/api.py
@@ -47,6 +47,12 @@ class LocalAPI(object):
"""Perform an instance update in the database"""
return self._manager.instance_update(context, instance_uuid, updates)
+ def instance_get_by_uuid(self, context, instance_uuid):
+ return self._manager.instance_get_by_uuid(context, instance_uuid)
+
+ def instance_get_all_by_host(self, context, host):
+ return self._manager.instance_get_all_by_host(context, host)
+
def migration_update(self, context, migration, status):
return self._manager.migration_update(context, migration, status)
@@ -62,6 +68,13 @@ class API(object):
return self.conductor_rpcapi.instance_update(context, instance_uuid,
updates)
+ def instance_get_by_uuid(self, context, instance_uuid):
+ return self.conductor_rpcapi.instance_get_by_uuid(context,
+ instance_uuid)
+
+ def instance_get_all_by_host(self, context, host):
+ return self.conductor_rpcapi.instance_get_all_by_host(context, host)
+
def migration_update(self, context, migration, status):
return self.conductor_rpcapi.migration_update(context, migration,
status)
diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py
index aa732b1d3..e37f6f068 100644
--- a/nova/conductor/manager.py
+++ b/nova/conductor/manager.py
@@ -41,7 +41,7 @@ datetime_fields = ['launched_at', 'terminated_at']
class ConductorManager(manager.SchedulerDependentManager):
"""Mission: TBD"""
- RPC_API_VERSION = '1.1'
+ RPC_API_VERSION = '1.2'
def __init__(self, *args, **kwargs):
super(ConductorManager, self).__init__(service_name='conductor',
@@ -61,6 +61,14 @@ class ConductorManager(manager.SchedulerDependentManager):
notifications.send_update(context, old_ref, instance_ref)
return jsonutils.to_primitive(instance_ref)
+ def instance_get_by_uuid(self, context, instance_uuid):
+ return jsonutils.to_primitive(
+ self.db.instance_get_by_uuid(context, instance_uuid))
+
+ def instance_get_all_by_host(self, context, host):
+ return jsonutils.to_primitive(
+ self.db.instance_get_all_by_host(context.elevated(), host))
+
def migration_update(self, context, migration, status):
migration_ref = self.db.migration_update(context.elevated(),
migration['id'],
diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py
index f73547925..7c4f1184e 100644
--- a/nova/conductor/rpcapi.py
+++ b/nova/conductor/rpcapi.py
@@ -28,6 +28,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
1.0 - Initial version.
1.1 - Added migration_update
+ 1.2 - Added instance_get_by_uuid and instance_get_all_by_host
"""
BASE_RPC_API_VERSION = '1.0'
@@ -44,6 +45,15 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
instance_uuid=instance_uuid,
updates=updates_p))
+ def instance_get_by_uuid(self, context, instance_uuid):
+ msg = self.make_msg('instance_get_by_uuid',
+ instance_uuid=instance_uuid)
+ return self.call(context, msg, version='1.2')
+
+ def instance_get_all_by_host(self, context, host):
+ msg = self.make_msg('instance_get_all_by_host', host=host)
+ return self.call(context, msg, version='1.2')
+
def migration_update(self, context, migration, status):
migration_p = jsonutils.to_primitive(migration)
msg = self.make_msg('migration_update', migration=migration_p,
diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py
index 3dcfe0209..3c37b30f6 100644
--- a/nova/tests/conductor/test_conductor.py
+++ b/nova/tests/conductor/test_conductor.py
@@ -99,6 +99,20 @@ class ConductorTestCase(BaseTestCase):
'finished')
self.assertEqual(migration['status'], 'finished')
+ def test_instance_get_by_uuid(self):
+ orig_instance = self._create_fake_instance()
+ copy_instance = self.conductor.instance_get_by_uuid(
+ self.context, orig_instance['uuid'])
+ self.assertEqual(orig_instance['name'],
+ copy_instance['name'])
+
+ def test_instance_get_all_by_host(self):
+ orig_instance = jsonutils.to_primitive(self._create_fake_instance())
+ all_instances = self.conductor.instance_get_all_by_host(
+ self.context, orig_instance['host'])
+ self.assertEqual(orig_instance['name'],
+ all_instances[0]['name'])
+
class ConductorRPCAPITestCase(ConductorTestCase):
"""Conductor RPC API Tests"""