HPE 3PAR: Fix to use small QoS Latency value
If QoS Latency is created with small value (less than 1; eg 0.1), then during create volume, below error occurs: Exception: invalid literal for int() with base 10: '0.1' This patch is submitted to handle small QoS Latency values. Closes-Bug: #2018994 Change-Id: I09cc3986a7be614f8870f3712eb05b5adfed2425
This commit is contained in:
parent
9e25452102
commit
5546b13597
@ -1107,19 +1107,26 @@ class TestHPE3PARDriverBase(HPE3PARBaseDriver):
|
|||||||
|
|
||||||
self.assertEqual(expected_cpg, result['snap_cpg'])
|
self.assertEqual(expected_cpg, result['snap_cpg'])
|
||||||
|
|
||||||
|
# (i) normal value; eg. 7, 10, etc
|
||||||
|
# (ii) small value less than 1; eg. 0.1, 0.02, etc
|
||||||
|
@ddt.data({'latency': 25}, {'latency': 0.2})
|
||||||
|
@ddt.unpack
|
||||||
@mock.patch.object(volume_types, 'get_volume_type')
|
@mock.patch.object(volume_types, 'get_volume_type')
|
||||||
def test_create_volume_qos(self, _mock_volume_types):
|
def test_create_volume_qos(self, _mock_volume_types, latency):
|
||||||
# setup_mock_client drive with default configuration
|
# setup_mock_client drive with default configuration
|
||||||
# and return the mock HTTP 3PAR client
|
# and return the mock HTTP 3PAR client
|
||||||
mock_client = self.setup_driver()
|
mock_client = self.setup_driver()
|
||||||
|
|
||||||
|
QOS = self.QOS.copy()
|
||||||
|
QOS['qos:latency'] = latency
|
||||||
|
|
||||||
_mock_volume_types.return_value = {
|
_mock_volume_types.return_value = {
|
||||||
'name': 'gold',
|
'name': 'gold',
|
||||||
'extra_specs': {
|
'extra_specs': {
|
||||||
'cpg': HPE3PAR_CPG_QOS,
|
'cpg': HPE3PAR_CPG_QOS,
|
||||||
'snap_cpg': HPE3PAR_CPG_SNAP,
|
'snap_cpg': HPE3PAR_CPG_SNAP,
|
||||||
'vvs_name': self.VVS_NAME,
|
'vvs_name': self.VVS_NAME,
|
||||||
'qos': self.QOS,
|
'qos': QOS,
|
||||||
'tpvv': True,
|
'tpvv': True,
|
||||||
'tdvv': False,
|
'tdvv': False,
|
||||||
'volume_type': self.volume_type}}
|
'volume_type': self.volume_type}}
|
||||||
|
@ -304,11 +304,12 @@ class HPE3PARCommon(object):
|
|||||||
4.0.18 - During conversion of volume to base volume,
|
4.0.18 - During conversion of volume to base volume,
|
||||||
error out if it has child snapshot(s). Bug #1994521
|
error out if it has child snapshot(s). Bug #1994521
|
||||||
4.0.19 - Update code to work with new WSAPI (of 2023). Bug #2015746
|
4.0.19 - Update code to work with new WSAPI (of 2023). Bug #2015746
|
||||||
|
4.0.20 - Use small QoS Latency value. Bug #2018994
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
VERSION = "4.0.19"
|
VERSION = "4.0.20"
|
||||||
|
|
||||||
stats = {}
|
stats = {}
|
||||||
|
|
||||||
@ -2051,7 +2052,17 @@ class HPE3PARCommon(object):
|
|||||||
if min_bw is None:
|
if min_bw is None:
|
||||||
qosRule['bwMinGoalKB'] = int(max_bw) * units.Ki
|
qosRule['bwMinGoalKB'] = int(max_bw) * units.Ki
|
||||||
if latency:
|
if latency:
|
||||||
qosRule['latencyGoal'] = int(latency)
|
# latency could be values like 2, 5, etc or
|
||||||
|
# small values like 0.1, 0.02, etc.
|
||||||
|
# we are converting to float so that 0.1 doesn't become 0
|
||||||
|
latency = float(latency)
|
||||||
|
if latency >= 1:
|
||||||
|
# by default, latency in millisecs
|
||||||
|
qosRule['latencyGoal'] = int(latency)
|
||||||
|
else:
|
||||||
|
# latency < 1 Eg. 0.1, 0.02, etc
|
||||||
|
# convert latency to microsecs
|
||||||
|
qosRule['latencyGoaluSecs'] = int(latency * 1000)
|
||||||
if priority:
|
if priority:
|
||||||
qosRule['priority'] = self.qos_priority_level.get(priority.lower())
|
qosRule['priority'] = self.qos_priority_level.get(priority.lower())
|
||||||
|
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
HPE 3PAR driver `bug #2018994
|
||||||
|
<https://bugs.launchpad.net/cinder/+bug/2018994>`_:
|
||||||
|
Fixed: use small QoS Latency value (less than 1)
|
Loading…
x
Reference in New Issue
Block a user