diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-11-29 00:57:57 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-11-29 00:57:57 +0000 |
| commit | d6fd1b2a9b6f47c124ce98d314e2f4adecda0958 (patch) | |
| tree | e36947bb8ce7b8e35a2f6c34b4b98287462dfb71 | |
| parent | 0666348b033b1838eef37c0f7e9db0d9e7bcb03a (diff) | |
| parent | 19307bb1580db0d4205659b61c76cae1cab56bf7 (diff) | |
Merge "Make compute manager use conductor for instance_gets"
| -rw-r--r-- | nova/compute/manager.py | 16 | ||||
| -rw-r--r-- | nova/conductor/api.py | 13 | ||||
| -rw-r--r-- | nova/conductor/manager.py | 10 | ||||
| -rw-r--r-- | nova/conductor/rpcapi.py | 10 | ||||
| -rw-r--r-- | nova/tests/conductor/test_conductor.py | 14 |
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""" |
