Merge "VMAX driver - Does not honor clone volume size"

This commit is contained in:
Jenkins 2016-09-15 20:22:14 +00:00 committed by Gerrit Code Review
commit b0b5f99554
2 changed files with 95 additions and 9 deletions

View File

@ -3432,6 +3432,10 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
self.data.test_snapshot)
@unittest.skip("Skip until bug #1578986 is fixed")
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'get_meta_members_capacity_in_byte',
@ -3449,7 +3453,8 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
'get_volume_type_extra_specs',
return_value={'volume_backend_name': 'ISCSINoFAST'})
def test_create_volume_from_same_size_meta_snapshot(
self, mock_volume_type, mock_sync_sv, mock_meta, mock_size):
self, mock_volume_type, mock_sync_sv, mock_meta, mock_size,
mock_compare):
self.data.test_volume['volume_name'] = "vmax-1234567"
self.driver.create_volume_from_snapshot(
self.data.test_volume, self.data.test_volume)
@ -3461,6 +3466,10 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
self.data.test_volume,
self.data.test_volume)
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'get_volume_meta_head',
@ -3479,7 +3488,7 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
return_value={'volume_backend_name': 'ISCSINoFAST'})
def test_create_clone_simple_volume_no_fast_success(
self, mock_volume_type, mock_volume, mock_sync_sv,
mock_simple_volume):
mock_simple_volume, mock_compare):
self.data.test_volume['volume_name'] = "vmax-1234567"
self.driver.create_cloned_volume(self.data.test_volume,
EMCVMAXCommonData.test_source_volume)
@ -3701,6 +3710,10 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
# Bug https://bugs.launchpad.net/cinder/+bug/1442376
@unittest.skip("Skip until bug #1578986 is fixed")
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_common.EMCVMAXCommon,
'_get_pool_and_storage_system',
@ -3723,7 +3736,7 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
return_value={'volume_backend_name': 'ISCSINoFAST'})
def _test_create_clone_with_different_meta_sizes(
self, mock_volume_type, mock_volume,
mock_meta, mock_size, mock_pool):
mock_meta, mock_size, mock_pool, mock_compare):
self.data.test_volume['volume_name'] = "vmax-1234567"
common = self.driver.common
volumeDict = {'classname': u'Symm_StorageVolume',
@ -3738,7 +3751,6 @@ class EMCVMAXISCSIDriverNoFastTestCase(test.TestCase):
mock.Mock(return_value=(0,
volumeDict,
EMCVMAXCommonData.storage_system)))
self.driver.create_cloned_volume(self.data.test_volume,
EMCVMAXCommonData.test_source_volume)
extraSpecs = self.driver.common._initial_setup(self.data.test_volume)
@ -4329,6 +4341,10 @@ class EMCVMAXISCSIDriverFastTestCase(test.TestCase):
self.data.test_snapshot)
@unittest.skip("Skip until bug #1578986 is fixed")
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'wait_for_job_complete',
@ -4351,7 +4367,7 @@ class EMCVMAXISCSIDriverFastTestCase(test.TestCase):
return_value={'volume_backend_name': 'ISCSIFAST'})
def test_create_volume_from_same_size_meta_snapshot(
self, mock_volume_type, mock_sync_sv, mock_meta, mock_size,
mock_wait):
mock_wait, mock_compare):
self.data.test_volume['volume_name'] = "vmax-1234567"
common = self.driver.common
common.fast.is_volume_in_default_SG = mock.Mock(return_value=True)
@ -5549,6 +5565,10 @@ class EMCVMAXFCDriverFastTestCase(test.TestCase):
self.data.test_snapshot)
@unittest.skip("Skip until bug #1578986 is fixed")
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'get_meta_members_capacity_in_byte',
@ -5566,7 +5586,8 @@ class EMCVMAXFCDriverFastTestCase(test.TestCase):
'get_volume_type_extra_specs',
return_value={'volume_backend_name': 'FCFAST'})
def test_create_volume_from_same_size_meta_snapshot(
self, mock_volume_type, mock_sync_sv, mock_meta, mock_size):
self, mock_volume_type, mock_sync_sv, mock_meta, mock_size,
mock_compare):
self.data.test_volume['volume_name'] = "vmax-1234567"
common = self.driver.common
common.fast.is_volume_in_default_SG = mock.Mock(return_value=True)
@ -5594,7 +5615,11 @@ class EMCVMAXFCDriverFastTestCase(test.TestCase):
self.data.test_volume,
EMCVMAXCommonData.test_source_volume)
def test_create_clone_simple_volume_fast_success(self):
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
def test_create_clone_simple_volume_fast_success(self, mock_compare):
extraSpecs = {'storagetype:fastpolicy': 'FC_GOLD1',
'volume_backend_name': 'FCFAST',
'isV3': False}
@ -6199,6 +6224,10 @@ class EMCV3DriverTestCase(test.TestCase):
self.driver.delete_snapshot(self.data.test_snapshot_v3)
@unittest.skip("Skip until bug #1578986 is fixed")
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
@mock.patch.object(
emc_vmax_common.EMCVMAXCommon,
'_get_pool_and_storage_system',
@ -6212,7 +6241,7 @@ class EMCV3DriverTestCase(test.TestCase):
'volume_get',
return_value=EMCVMAXCommonData.test_source_volume)
def test_create_cloned_volume_v3_success(
self, mock_volume_db, mock_type, moke_pool):
self, mock_volume_db, mock_type, mock_pool, mock_compare):
self.data.test_volume_v3['volume_name'] = "vmax-1234567"
cloneVol = {}
cloneVol['name'] = 'vol1'
@ -6226,6 +6255,7 @@ class EMCV3DriverTestCase(test.TestCase):
cloneVol['NumberOfBlocks'] = 100
cloneVol['BlockSize'] = self.data.block_size
cloneVol['host'] = self.data.fake_host_v3
cloneVol['size'] = 1
common = self.driver.common
common.utils.is_clone_licensed = (
mock.Mock(return_value=True))
@ -8410,6 +8440,9 @@ class EMCVMAXCommonTest(test.TestCase):
configuration.safe_get.return_value = 'CommonTests'
configuration.config_group = 'CommonTests'
emc_vmax_common.EMCVMAXCommon._gather_info = mock.Mock()
instancename = FakeCIMInstanceName()
self.mock_object(emc_vmax_utils.EMCVMAXUtils, 'get_instance_name',
instancename.fake_getinstancename)
driver = emc_vmax_iscsi.EMCVMAXISCSIDriver(configuration=configuration)
driver.db = FakeDB()
self.driver = driver
@ -8526,6 +8559,27 @@ class EMCVMAXCommonTest(test.TestCase):
self.assertEqual(
'10.10.10.10', ip_and_iqn['ip'])
@mock.patch.object(
emc_vmax_utils.EMCVMAXUtils,
'compare_size',
return_value=0)
def test_extend_volume(self, mock_compare):
self.driver.common.conn = FakeEcomConnection()
conn = FakeEcomConnection()
volumeInstanceName = (
conn.EnumerateInstanceNames("EMC_StorageVolume")[0])
volumeInstance = conn.GetInstance(volumeInstanceName)
new_size_gb = 5
old_size_gbs = 1
volumeName = 'extendVol'
extraSpecs = {'volume_backend_name': 'V3_BE',
'isV3': True,
'pool': 'SRP_1',
'workload': 'DSS',
'slo': 'Bronze'}
self.driver.common._extend_volume(
volumeInstance, volumeName, new_size_gb, old_size_gbs, extraSpecs)
class EMCVMAXProvisionTest(test.TestCase):
def setUp(self):

View File

@ -594,7 +594,23 @@ class EMCVMAXCommon(object):
% {'volumename': volumeName})
LOG.error(exceptionMessage)
raise exception.VolumeBackendAPIException(data=exceptionMessage)
return self._extend_volume(
volumeInstance, volumeName, newSize, originalVolumeSize,
extraSpecs)
def _extend_volume(
self, volumeInstance, volumeName, newSize, originalVolumeSize,
extraSpecs):
"""Extends an existing volume.
:params volumeInstance: the volume Instance
:params volumeName: the volume name
:params newSize: the new size to increase the volume to
:params originalVolumeSize: the original size
:params extraSpecs: extra specifications
:returns: dict -- modifiedVolumeDict - the extended volume Object
:raises: VolumeBackendAPIException
"""
if int(originalVolumeSize) > int(newSize):
exceptionMessage = (_(
"Your original size: %(originalVolumeSize)s GB is greater "
@ -617,7 +633,6 @@ class EMCVMAXCommon(object):
rc, modifiedVolumeDict = self._extend_composite_volume(
volumeInstance, volumeName, newSize, additionalVolumeSize,
extraSpecs)
# Check the occupied space of the new extended volume.
extendedVolumeInstance = self.utils.find_volume_instance(
self.conn, modifiedVolumeDict, volumeName)
@ -2177,6 +2192,23 @@ class EMCVMAXCommon(object):
sourceInstance,
isSnapshot,
extraSpecs)
if not isSnapshot:
old_size_gbs = self.utils.convert_bits_to_gbs(
self.utils.get_volume_size(
self.conn, sourceInstance))
if cloneVolume['size'] != old_size_gbs:
LOG.info(_LI("Extending clone %(cloneName)s to "
"%(newSize)d GBs"),
{'cloneName': cloneName,
'newSize': cloneVolume['size']})
cloneInstance = self.utils.find_volume_instance(
self.conn, cloneDict, cloneName)
self._extend_volume(
cloneInstance, cloneName, cloneVolume['size'],
old_size_gbs, extraSpecs)
LOG.debug("Leaving _create_cloned_volume: Volume: "
"%(cloneName)s Source Volume: %(sourceName)s "
"Return code: %(rc)lu.",