Merge "[Pure Storage] Fix QoS setting for cloned volumes"
This commit is contained in:
@@ -2151,6 +2151,51 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
|
|||||||
self.driver.create_cloned_volume, vol, src_vol)
|
self.driver.create_cloned_volume, vol, src_vol)
|
||||||
self.assertFalse(self.array.extend_volume.called)
|
self.assertFalse(self.array.extend_volume.called)
|
||||||
|
|
||||||
|
# Tests cloning a volume that is not replicated type with QoS
|
||||||
|
@ddt.data(
|
||||||
|
{
|
||||||
|
"qos_name": "qos-iops-bws",
|
||||||
|
"qos_spec": dict(QOS_IOPS_BWS),
|
||||||
|
"qos_data": {"iops_limit": '100', "bandwidth_limit": '1048576'}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"qos_name": "qos-iops",
|
||||||
|
"qos_spec": dict(QOS_IOPS),
|
||||||
|
"qos_data": {"iops_limit": '100'}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"qos_name": "qos-bws",
|
||||||
|
"qos_spec": dict(QOS_BWS),
|
||||||
|
"qos_data": {"bandwidth_limit": '1048576'}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
@mock.patch(BASE_DRIVER_OBJ + "._get_qos_settings")
|
||||||
|
@mock.patch(BASE_DRIVER_OBJ + ".set_qos")
|
||||||
|
@mock.patch(DRIVER_PATH + ".flasharray.VolumePost")
|
||||||
|
def test_create_cloned_volume_qos(self, qos_info,
|
||||||
|
mock_fa,
|
||||||
|
mock_qos,
|
||||||
|
mock_qos_specs):
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
qos = qos_specs.create(ctxt,
|
||||||
|
qos_info["qos_name"],
|
||||||
|
qos_info["qos_spec"])
|
||||||
|
qos_data = self.flasharray.Qos(**qos_info["qos_data"])
|
||||||
|
vol, vol_name = self.new_fake_vol(set_provider_id=False)
|
||||||
|
src_vol, src_name = self.new_fake_vol(spec={"size": 1},
|
||||||
|
type_qos_specs_id=qos.id)
|
||||||
|
mock_data = self.array.flasharray.VolumePost(names=[vol_name],
|
||||||
|
source=
|
||||||
|
pure.flasharray.
|
||||||
|
reference(name=src_name),
|
||||||
|
qos=qos_data)
|
||||||
|
mock_fa.return_value = mock_data
|
||||||
|
mock_qos_specs.return_value = qos
|
||||||
|
self.mock_object(self.driver, '_get_volume_type_extra_spec',
|
||||||
|
return_value={})
|
||||||
|
self.driver.create_cloned_volume(vol, src_vol)
|
||||||
|
self.driver.set_qos.assert_called_with(self.array, vol_name, qos)
|
||||||
|
|
||||||
@mock.patch(DRIVER_PATH + ".flasharray.VolumePost")
|
@mock.patch(DRIVER_PATH + ".flasharray.VolumePost")
|
||||||
def test_create_cloned_volume_sync_rep(self, mock_fa):
|
def test_create_cloned_volume_sync_rep(self, mock_fa):
|
||||||
repl_extra_specs = {
|
repl_extra_specs = {
|
||||||
|
|||||||
@@ -938,6 +938,11 @@ class PureBaseVolumeDriver(san.SanDriver):
|
|||||||
vol_name,
|
vol_name,
|
||||||
src_vref["size"],
|
src_vref["size"],
|
||||||
volume["size"])
|
volume["size"])
|
||||||
|
# Check if the volume_type has QoS settings and if so
|
||||||
|
# apply them to the newly created volume
|
||||||
|
qos = self._get_qos_settings(volume.volume_type)
|
||||||
|
if qos:
|
||||||
|
self.set_qos(current_array, vol_name, qos)
|
||||||
|
|
||||||
return self._setup_volume(current_array, volume, vol_name)
|
return self._setup_volume(current_array, volume, vol_name)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Pure Storage driver `bug #2100547
|
||||||
|
<https://bugs.launchpad.net/cinder/+bug/2100547>`_: Fixed issue where
|
||||||
|
volumes created as clones from a source image volume did not get
|
||||||
|
the defined QoS settings associated with the volume type used.
|
||||||
Reference in New Issue
Block a user