Merge "EMC VMAX - Change naming convention for MV and SG for FAST"

This commit is contained in:
Jenkins 2015-12-02 02:38:22 +00:00 committed by Gerrit Code Review
commit ff3a937252
5 changed files with 81 additions and 3 deletions

View File

@ -1840,6 +1840,65 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
def fake_is_v3(self, conn, serialNumber): def fake_is_v3(self, conn, serialNumber):
return False return False
def populate_masking_dict_setup(self):
extraSpecs = {'storagetype:pool': u'gold_pool',
'volume_backend_name': 'GOLD_POOL_BE',
'storagetype:array': u'1234567891011',
'isV3': False,
'portgroupname': u'OS-portgroup-PG',
'storagetype:fastpolicy': u'GOLD'}
vol = {'SystemName': self.data.storage_system}
self.driver.common._find_lun = mock.Mock(
return_value=vol)
self.driver.common.utils.find_controller_configuration_service = (
mock.Mock(return_value=None))
return extraSpecs
def test_populate_masking_dict_fast(self):
extraSpecs = self.populate_masking_dict_setup()
# If fast is enabled it will uniquely determine the SG and MV
# on the host along with the protocol(iSCSI) e.g. I
maskingViewDict = self.driver.common._populate_masking_dict(
self.data.test_volume, self.data.connector, extraSpecs)
self.assertEqual(
'OS-fakehost-GOLD-FP-I-SG', maskingViewDict['sgGroupName'])
self.assertEqual(
'OS-fakehost-GOLD-FP-I-MV', maskingViewDict['maskingViewName'])
def test_populate_masking_dict_fast_more_than_14chars(self):
# If the length of the FAST policy name is greater than 14 chars
extraSpecs = self.populate_masking_dict_setup()
extraSpecs['storagetype:fastpolicy'] = 'GOLD_MORE_THAN_FOURTEEN_CHARS'
maskingViewDict = self.driver.common._populate_masking_dict(
self.data.test_volume, self.data.connector, extraSpecs)
self.assertEqual(
'OS-fakehost-GOLD_MO__CHARS-FP-I-SG',
maskingViewDict['sgGroupName'])
self.assertEqual(
'OS-fakehost-GOLD_MO__CHARS-FP-I-MV',
maskingViewDict['maskingViewName'])
def test_populate_masking_dict_no_fast(self):
# If fast isn't enabled the pool will uniquely determine the SG and MV
# on the host along with the protocol(iSCSI) e.g. I
extraSpecs = self.populate_masking_dict_setup()
extraSpecs['storagetype:fastpolicy'] = None
maskingViewDict = self.driver.common._populate_masking_dict(
self.data.test_volume, self.data.connector, extraSpecs)
self.assertEqual(
'OS-fakehost-gold_pool-I-SG', maskingViewDict['sgGroupName'])
self.assertEqual(
'OS-fakehost-gold_pool-I-MV', maskingViewDict['maskingViewName'])
# If the length of the FAST policy name is greater than 14 chars and
# the length of the short host is more than 38 characters
connector = {'host': 'SHORT_HOST_MORE_THEN THIRTY_EIGHT_CHARACTERS'}
extraSpecs['storagetype:fastpolicy'] = (
'GOLD_MORE_THAN_FOURTEEN_CHARACTERS')
maskingViewDict = self.driver.common._populate_masking_dict(
self.data.test_volume, connector, extraSpecs)
self.assertLessEqual(64, len(maskingViewDict['sgGroupName']))
def test_generate_unique_trunc_pool(self): def test_generate_unique_trunc_pool(self):
pool_under_16_chars = 'pool_under_16' pool_under_16_chars = 'pool_under_16'
pool1 = self.driver.utils.generate_unique_trunc_pool( pool1 = self.driver.utils.generate_unique_trunc_pool(

View File

@ -1752,12 +1752,15 @@ class EMCVMAXCommon(object):
'slo': slo, 'slo': slo,
'workload': workload})) 'workload': workload}))
else: else:
maskingViewDict['fastPolicy'] = extraSpecs[FASTPOLICY]
if maskingViewDict['fastPolicy']:
uniqueName = self.utils.generate_unique_trunc_fastpolicy(
maskingViewDict['fastPolicy']) + '-FP'
prefix = ( prefix = (
("OS-%(shortHostName)s-%(poolName)s-%(protocol)s" ("OS-%(shortHostName)s-%(poolName)s-%(protocol)s"
% {'shortHostName': shortHostName, % {'shortHostName': shortHostName,
'poolName': uniqueName, 'poolName': uniqueName,
'protocol': protocol})) 'protocol': protocol}))
maskingViewDict['fastPolicy'] = extraSpecs[FASTPOLICY]
maskingViewDict['sgGroupName'] = ("%(prefix)s-SG" maskingViewDict['sgGroupName'] = ("%(prefix)s-SG"
% {'prefix': prefix}) % {'prefix': prefix})

View File

@ -42,9 +42,10 @@ class EMCVMAXFCDriver(driver.FibreChannelDriver):
2.2.2 - Update Consistency Group 2.2.2 - Update Consistency Group
2.2.3 - Pool aware scheduler(multi-pool) support 2.2.3 - Pool aware scheduler(multi-pool) support
2.2.4 - Create CG from CG snapshot 2.2.4 - Create CG from CG snapshot
2.3 - Name change for MV and SG for FAST (bug #1515181)
""" """
VERSION = "2.2.4" VERSION = "2.3"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -50,9 +50,10 @@ class EMCVMAXISCSIDriver(driver.ISCSIDriver):
2.2.2 - Update Consistency Group 2.2.2 - Update Consistency Group
2.2.3 - Pool aware scheduler(multi-pool) support 2.2.3 - Pool aware scheduler(multi-pool) support
2.2.4 - Create CG from CG snapshot 2.2.4 - Create CG from CG snapshot
2.3 - Name change for MV and SG for FAST (bug #1515181)
""" """
VERSION = "2.2.4" VERSION = "2.3"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -2377,6 +2377,20 @@ class EMCVMAXUtils(object):
else: else:
return poolName return poolName
def generate_unique_trunc_fastpolicy(self, fastPolicyName):
"""Create a unique fast policy name under 14 chars
:param fastPolicyName: long fast policy name
:returns: truncated fast policy name
"""
if fastPolicyName and len(fastPolicyName) > 14:
return (
("%(first)s_%(last)s"
% {'first': fastPolicyName[:7],
'last': fastPolicyName[-6:]}))
else:
return fastPolicyName
def get_iscsi_protocol_endpoints(self, conn, portgroupinstancename): def get_iscsi_protocol_endpoints(self, conn, portgroupinstancename):
"""Get the iscsi protocol endpoints of a port group. """Get the iscsi protocol endpoints of a port group.