Merge "PowerMax Driver - Retry on a symmetrix lock"

This commit is contained in:
Zuul 2022-06-18 11:14:01 +00:00 committed by Gerrit Code Review
commit 90e14e662b
2 changed files with 51 additions and 0 deletions

View File

@ -1996,6 +1996,30 @@ class PowerMaxRestTest(test.TestCase):
mck_create.assert_called_once_with(
array_id, 'replication', ref_resource, ref_payload)
@mock.patch.object(
rest.PowerMaxRest, 'wait_for_job',
side_effect=exception.VolumeBackendAPIException(''))
@mock.patch.object(rest.PowerMaxRest, 'create_resource',
return_value=(200, 'job'))
def test_srdf_protect_storage_group_retries(self, mck_create, mck_wait):
array_id = self.data.array
remote_array_id = self.data.remote_array
rdf_group_no = self.data.rdf_group_no_1
replication_mode = utils.REP_METRO
sg_name = self.data.default_sg_re_enabled
service_level = 'Diamond'
extra_specs = deepcopy(self.data.rep_extra_specs)
extra_specs[utils.METROBIAS] = True
remote_sg = self.data.rdf_managed_async_grp
self.assertRaises(exception.VolumeBackendAPIException,
self.rest.srdf_protect_storage_group,
array_id, remote_array_id, rdf_group_no,
replication_mode, sg_name, service_level,
extra_specs, target_sg=remote_sg)
# 6 retries on a VolumeBackendAPIException
self.assertEqual(6, mck_create.call_count)
@mock.patch.object(rest.PowerMaxRest, 'wait_for_job')
@mock.patch.object(rest.PowerMaxRest, 'modify_resource',
return_value=(200, 'job'))
@ -2281,6 +2305,31 @@ class PowerMaxRestTest(test.TestCase):
array_id, rdf_group_no, device_id)
self.assertEqual(ref_response, create_response)
@mock.patch.object(
rest.PowerMaxRest, 'get_rdf_pair_volume',
return_value=tpd.PowerMaxData.rdf_group_vol_details)
@mock.patch.object(
rest.PowerMaxRest, 'wait_for_job',
side_effect=exception.VolumeBackendAPIException(''))
@mock.patch.object(rest.PowerMaxRest, 'create_resource',
return_value=(200, 'job'))
def test_srdf_create_device_pair_retry(
self, mck_create, mck_wait, mck_get):
array_id = self.data.array
remote_array = self.data.remote_array
rdf_group_no = self.data.rdf_group_no_1
mode = utils.REP_ASYNC
device_id = self.data.device_id
rep_extra_specs = self.data.rep_extra_specs
rep_extra_specs['array'] = remote_array
self.assertRaises(exception.VolumeBackendAPIException,
self.rest.srdf_create_device_pair,
array_id, rdf_group_no, mode, device_id,
rep_extra_specs, True)
# 6 retries on a VolumeBackendAPIException
self.assertEqual(6, mck_create.call_count)
@mock.patch.object(rest.PowerMaxRest, 'get_storage_group_rdf_group_state',
return_value=[utils.RDF_CONSISTENT_STATE])
def test_wait_for_rdf_group_sync(self, mck_get):

View File

@ -2878,6 +2878,7 @@ class PowerMaxRest(object):
payload.pop('establish')
return payload
@retry(retry_exc_tuple, interval=5, retries=6)
def srdf_protect_storage_group(
self, array_id, remote_array_id, rdf_group_no, replication_mode,
sg_name, service_level, extra_specs, target_sg=None):
@ -3087,6 +3088,7 @@ class PowerMaxRest(object):
self.delete_resource(array, REPLICATION, 'rdf_group', resource)
LOG.debug("Device Pair successfully deleted.")
@retry(retry_exc_tuple, interval=5, retries=6)
def srdf_create_device_pair(self, array, rdf_group_no, mode, device_id,
rep_extra_specs, next_gen):
"""Create a RDF device pair in an existing RDF group.