From 6b03c8f589498a44c0713be761951ece534a325f Mon Sep 17 00:00:00 2001 From: Lee Yarwood Date: Fri, 8 Nov 2019 12:26:01 +0000 Subject: [PATCH] compute: Use long_rpc_timeout in reserve_block_device_name Given the instance.uuid lock taken on the remote compute, calls to reserve_block_device_name can take a large amount of time to complete when attaching multiple volumes. To help avoid timeouts during such attempts this change switches to using the long_rpc_timeout for the overall timeout for each call. Related-Bug: #1844296 Change-Id: I17e0e45117a3312c11d6c7f2762dd416b6067979 (cherry picked from commit 648c05f7bee025087c2f9d8e2f9cda6e2c13e13f) (cherry picked from commit f9a1bc71050b41753259b96998a2a4b4dc8ecd79) (cherry picked from commit e858ab3bbe79bde32cce4bc661c0c4edc04b51d3) --- nova/compute/rpcapi.py | 4 +++- nova/conf/rpc.py | 1 + nova/tests/unit/compute/test_rpcapi.py | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 9584cdfe90bf..fb247f20dc37 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -919,7 +919,9 @@ class ComputeAPI(object): version = '5.0' client = self.router.client(ctxt) cctxt = client.prepare(server=_compute_host(None, instance), - version=version) + version=version, + call_monitor_timeout=CONF.rpc_response_timeout, + timeout=CONF.long_rpc_timeout) return cctxt.call(ctxt, 'reserve_block_device_name', **kw) def backup_instance(self, ctxt, instance, image_id, backup_type, diff --git a/nova/conf/rpc.py b/nova/conf/rpc.py index e5bd1b989861..377bbe56ba59 100644 --- a/nova/conf/rpc.py +++ b/nova/conf/rpc.py @@ -28,6 +28,7 @@ Operations with RPC calls that utilize this value: * live migration * scheduling +* volume attach Related options: diff --git a/nova/tests/unit/compute/test_rpcapi.py b/nova/tests/unit/compute/test_rpcapi.py index 2610cb2ea58a..17efd6dba18e 100644 --- a/nova/tests/unit/compute/test_rpcapi.py +++ b/nova/tests/unit/compute/test_rpcapi.py @@ -410,10 +410,12 @@ class ComputeRpcAPITestCase(test.NoDBTestCase): limits=None, request_spec=None, version='5.0') def test_reserve_block_device_name(self): + self.flags(long_rpc_timeout=1234) self._test_compute_api('reserve_block_device_name', 'call', instance=self.fake_instance_obj, device='device', volume_id='id', disk_bus='ide', device_type='cdrom', tag='foo', multiattach=True, version='5.0', + timeout=1234, call_monitor_timeout=60, _return_value=objects_block_dev.BlockDeviceMapping()) def test_refresh_instance_security_rules(self):