Merge "PowerMax Driver - Replication Settings Fix"

This commit is contained in:
Zuul 2019-02-18 14:50:23 +00:00 committed by Gerrit Code Review
commit 45408cc4d9
5 changed files with 46 additions and 20 deletions

View File

@ -8434,16 +8434,29 @@ class PowerMaxCommonReplicationTest(test.TestCase):
rep_extra_specs2 = self.common._get_replication_extra_specs(
extra_specs1, rep_config)
self.assertEqual(ref_specs2, rep_extra_specs2)
# Path three - slo not valid
extra_specs3 = deepcopy(self.extra_specs)
ref_specs3 = deepcopy(ref_specs1)
ref_specs3['slo'] = None
ref_specs3['workload'] = None
def test_get_replication_extra_specs_powermax(self):
rep_config = self.utils.get_replication_config(
[self.replication_device])
rep_specs = deepcopy(self.data.rep_extra_specs2)
extra_specs = deepcopy(self.extra_specs)
# SLO not valid, both SLO and Workload set to NONE
rep_specs['slo'] = None
rep_specs['workload'] = None
with mock.patch.object(self.provision, 'verify_slo_workload',
return_value=(False, False)):
rep_extra_specs3 = self.common._get_replication_extra_specs(
extra_specs3, rep_config)
self.assertEqual(ref_specs3, rep_extra_specs3)
rep_extra_specs = self.common._get_replication_extra_specs(
extra_specs, rep_config)
self.assertEqual(rep_specs, rep_extra_specs)
# SL valid, workload invalid, only workload set to NONE
rep_specs['slo'] = 'Diamond'
rep_specs['workload'] = None
with mock.patch.object(self.provision, 'verify_slo_workload',
return_value=(True, False)):
rep_extra_specs = self.common._get_replication_extra_specs(
extra_specs, rep_config)
self.assertEqual(rep_specs, rep_extra_specs)
def test_get_secondary_stats(self):
rep_config = self.utils.get_replication_config(

View File

@ -184,9 +184,9 @@ class PowerMaxCommon(object):
self.failover = False
self._get_replication_info()
self._get_u4p_failover_info()
self.nextGen = False
self._gather_info()
self.version_dict = {}
self.nextGen = False
def _gather_info(self):
"""Gather the relevant information for update_volume_stats."""
@ -1651,8 +1651,8 @@ class PowerMaxCommon(object):
:raises: VolumeBackendAPIException:
"""
array = extra_specs[utils.ARRAY]
self.nextGen = self.rest.is_next_gen_array(array)
if self.nextGen:
nextGen = self.rest.is_next_gen_array(array)
if nextGen:
extra_specs[utils.WORKLOAD] = 'NONE'
is_valid_slo, is_valid_workload = self.provision.verify_slo_workload(
array, extra_specs[utils.SLO],
@ -3852,16 +3852,18 @@ class PowerMaxCommon(object):
extra_specs[utils.SLO],
rep_extra_specs[utils.WORKLOAD],
rep_extra_specs[utils.SRP]))
if not is_valid_slo or not is_valid_workload:
LOG.warning("The target array does not support the storage "
"pool setting for SLO %(slo)s or workload "
"%(workload)s. Not assigning any SLO or "
"workload.",
{'slo': extra_specs[utils.SLO],
'workload': extra_specs[utils.WORKLOAD]})
if not is_valid_slo:
LOG.warning("The target array does not support the "
"storage pool setting for SLO %(slo)s, "
"setting to NONE.",
{'slo': extra_specs[utils.SLO]})
rep_extra_specs[utils.SLO] = None
if extra_specs[utils.WORKLOAD]:
rep_extra_specs[utils.WORKLOAD] = None
if not is_valid_workload:
LOG.warning("The target array does not support the "
"storage pool setting for workload "
"%(workload)s, setting to NONE.",
{'workload': extra_specs[utils.WORKLOAD]})
rep_extra_specs[utils.WORKLOAD] = None
return rep_extra_specs

View File

@ -105,6 +105,7 @@ class PowerMaxFCDriver(san.SanDriver, driver.FibreChannelDriver):
(bp/vmax-unisphere-failover)
- Rebrand from VMAX to PowerMax(bp/vmax-powermax-rebrand)
- Change from 84 to 90 REST endpoints (bug #1808539)
- Fix for PowerMax OS replication settings (bug #1812685)
"""
VERSION = "4.0.0"

View File

@ -110,6 +110,7 @@ class PowerMaxISCSIDriver(san.SanISCSIDriver):
(bp/vmax-unisphere-failover)
- Rebrand from VMAX to PowerMax(bp/vmax-powermax-rebrand)
- Change from 84 to 90 REST endpoints (bug #1808539)
- Fix for PowerMax OS replication settings (bug #1812685)
"""
VERSION = "4.0.0"

View File

@ -0,0 +1,9 @@
---
fixes:
- When using a PowerMax OS array as a replication target, where the source is
an All-Flash/Hybrid array running HyperMax OS, service level and workload
settings are not correctly applied for devices on the replication target if
a workload is specified. Instead of setting only the workload to None, both
service level and workload are set to None. This fix corrects the
application of service level and workload settings for replication sessions
where the source is HyperMax OS and the target is PowerMax OS.