summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/compute/manager.py7
-rw-r--r--nova/compute/rpcapi.py5
-rw-r--r--nova/tests/compute/test_compute.py8
-rw-r--r--nova/tests/compute/test_rpcapi.py6
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')