diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 0694d6e095b..7d7b5715113 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -84,6 +84,10 @@ def attach_volume(self, ctxt, instance, volume_id, mountpoint): mountpoint=mountpoint), topic=self._compute_topic(ctxt, None, instance)) + def compare_cpu(self, ctxt, cpu_info, host): + return self.call(ctxt, self.make_msg('compare_cpu', cpu_info=cpu_info), + topic=self._compute_topic(ctxt, host, None)) + def confirm_resize(self, ctxt, instance, migration_id, host, cast=True): rpc_method = self.cast if cast else self.call diff --git a/nova/scheduler/driver.py b/nova/scheduler/driver.py index 3642785847b..bf635ddd447 100644 --- a/nova/scheduler/driver.py +++ b/nova/scheduler/driver.py @@ -23,6 +23,7 @@ from nova.compute import api as compute_api from nova.compute import power_state +from nova.compute import rpcapi as compute_rpcapi from nova.compute import vm_states from nova import db from nova import exception @@ -137,6 +138,7 @@ def __init__(self): self.host_manager = importutils.import_object( FLAGS.scheduler_host_manager) self.compute_api = compute_api.API() + self.compute_rpcapi = compute_rpcapi.ComputeAPI() def get_host_list(self): """Get a list of hosts from the HostManager.""" @@ -354,10 +356,8 @@ def _live_migration_common_check(self, context, instance_ref, dest, # Checking cpuinfo. try: - rpc.call(context, - rpc.queue_get_for(context, FLAGS.compute_topic, dest), - {"method": 'compare_cpu', - "args": {'cpu_info': oservice_ref['cpu_info']}}) + self.compute_rpcapi.compare_cpu(context, oservice_ref['cpu_info'], + dest) except exception.InvalidCPUInfo: src = instance_ref['host'] diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index 7a4fda426a0..23ac55fc30e 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -105,6 +105,10 @@ def test_attach_volume(self): self._test_compute_api('attach_volume', 'cast', instance=self.fake_instance, volume_id='id', mountpoint='mp') + def test_compare_cpu(self): + self._test_compute_api('compare_cpu', 'call', cpu_info='info', + host='host') + def test_confirm_resize_cast(self): self._test_compute_api('confirm_resize', 'cast', instance=self.fake_instance, migration_id='id', host='host') diff --git a/nova/tests/scheduler/test_scheduler.py b/nova/tests/scheduler/test_scheduler.py index 302f229396f..e7057b40621 100644 --- a/nova/tests/scheduler/test_scheduler.py +++ b/nova/tests/scheduler/test_scheduler.py @@ -23,6 +23,7 @@ from nova.compute import api as compute_api from nova.compute import power_state +from nova.compute import rpcapi as compute_rpcapi from nova.compute import vm_states from nova import context from nova import db @@ -539,7 +540,9 @@ def test_live_migration_all_checks_pass(self): dest).AndReturn('dest_queue') rpc.call(self.context, 'dest_queue', {'method': 'compare_cpu', - 'args': {'cpu_info': 'fake_cpu_info'}}).AndReturn(True) + 'args': {'cpu_info': 'fake_cpu_info'}, + 'version': compute_rpcapi.ComputeAPI.RPC_API_VERSION}, None + ).AndReturn(True) db.instance_update_and_get_original(self.context, instance['id'], {"vm_state": vm_states.MIGRATING}).AndReturn( @@ -957,8 +960,9 @@ def test_live_migration_dest_host_incompatable_cpu_raises(self): dest).AndReturn('dest_queue') rpc.call(self.context, 'dest_queue', {'method': 'compare_cpu', - 'args': {'cpu_info': 'fake_cpu_info'}}).AndRaise( - rpc_common.RemoteError()) + 'args': {'cpu_info': 'fake_cpu_info'}, + 'version': compute_rpcapi.ComputeAPI.RPC_API_VERSION}, None + ).AndRaise(rpc_common.RemoteError()) self.mox.ReplayAll() self.assertRaises(rpc_common.RemoteError,