[Pure Storage] Fix QoS setting for cloned volumes
Volumes created from glance images on the source FlashArray using volume cloning are not being assigned the correct QoS specifications associated with the requested volume type. This patch resolves that issue. Closes-Bug: #2100547 Change-Id: Ic302492b624a91b56143724eeaa4a85608cb1911
This commit is contained in:
parent
5c1976dd33
commit
bc2c4cc9c8
@ -2074,6 +2074,51 @@ 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.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")
|
||||
def test_create_cloned_volume_sync_rep(self, mock_fa):
|
||||
repl_extra_specs = {
|
||||
|
@ -938,6 +938,11 @@ 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 = 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)
|
||||
|
||||
|
@ -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.
|
Loading…
x
Reference in New Issue
Block a user