diff options
-rw-r--r-- | nova/compute/manager.py | 7 | ||||
-rw-r--r-- | nova/compute/rpcapi.py | 5 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 8 | ||||
-rw-r--r-- | nova/tests/compute/test_rpcapi.py | 6 |
4 files changed, 17 insertions, 9 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 8c35d286b..a110401bc 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2202,11 +2202,8 @@ class ComputeManager(manager.SchedulerDependentManager): instance_ref['uuid']): volume_id = bdm['volume_id'] volume = self.volume_api.get(context, volume_id) - rpc.call(context, - rpc.queue_get_for(context, FLAGS.compute_topic, dest), - {"method": "remove_volume_connection", - "args": {'instance_id': instance_ref['id'], - 'volume_id': volume['id']}}) + self.compute_rpcapi.remove_volume_connection(context, instance_ref, + volume['id'], dest) # Block migration needs empty image at destination host # before migration starts, so if any failure occurs, diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 7d7b57151..f078f9d64 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -243,6 +243,11 @@ class ComputeAPI(nova.rpc.proxy.RpcProxy): instance_uuid=instance['uuid'], address=address), topic=self._compute_topic(ctxt, None, instance)) + def remove_volume_connection(self, ctxt, instance, volume_id, host): + return self.call(ctxt, self.make_msg('remove_volume_connection', + instance_id=instance['id'], volume_id=volume_id), + topic=self._compute_topic(ctxt, host, None)) + def rescue_instance(self, ctxt, instance, rescue_password): self.cast(ctxt, self.make_msg('rescue_instance', instance_uuid=instance['uuid'], diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 3ed9af763..6f03e9c84 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -1456,9 +1456,11 @@ class ComputeTestCase(BaseTestCase): 'args': {'instance_id': inst_ref['id'], 'host': self.compute.host, 'teardown': False}}) - rpc.call(c, topic, {"method": "remove_volume_connection", - "args": {'instance_id': inst_ref['id'], - 'volume_id': volume_id}}) + rpc.call(c, topic, + {"method": "remove_volume_connection", + "args": {'instance_id': inst_ref['id'], + 'volume_id': volume_id}, + "version": compute_rpcapi.ComputeAPI.RPC_API_VERSION}, None) rpc.cast(c, topic, {"method": "rollback_live_migration_at_destination", "args": {'instance_id': inst_ref['id']}}) diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index 23ac55fc3..78ca3ee3c 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -58,7 +58,7 @@ class ComputeRpcAPITestCase(test.TestCase): instance = expected_msg['args']['instance'] del expected_msg['args']['instance'] if method in ['rollback_live_migration_at_destination', - 'pre_live_migration', + 'pre_live_migration', 'remove_volume_connection', 'post_live_migration_at_destination']: expected_msg['args']['instance_id'] = instance['id'] else: @@ -221,6 +221,10 @@ class ComputeRpcAPITestCase(test.TestCase): self._test_compute_api('remove_fixed_ip_from_instance', 'cast', instance=self.fake_instance, address='addr') + def test_remove_volume_connection(self): + self._test_compute_api('remove_volume_connection', 'call', + instance=self.fake_instance, volume_id='id', host='host') + def test_rescue_instance(self): self._test_compute_api('rescue_instance', 'cast', instance=self.fake_instance, rescue_password='pw') |