Merge "VMAX driver - Does not honor clone volume size"
This commit is contained in:
commit
b0b5f99554
@ -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):
|
||||
|
@ -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.",
|
||||
|
Loading…
Reference in New Issue
Block a user