Merge "[Pure Storage] Fix QoS setting for cloned volumes"

This commit is contained in:
Zuul 2025-03-13 02:47:53 +00:00 committed by Gerrit Code Review
commit 32689950da
3 changed files with 56 additions and 0 deletions

View File

@ -1851,6 +1851,49 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.driver.create_cloned_volume, vol, src_vol)
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.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")
def test_create_cloned_volume_sync_rep(self, mock_fa):
repl_extra_specs = {

View File

@ -817,6 +817,12 @@ class PureBaseVolumeDriver(san.SanDriver):
vol_name,
src_vref["size"],
volume["size"])
# Check if the volume_type has QoS settings and if so
# apply them to the newly created volume
qos = None
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)

View File

@ -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 do get
the defined QoS settings associated with the volume type used.