Merge "IBM Storage: Fix for misidentification of QoS type"

This commit is contained in:
Jenkins 2017-07-10 17:19:07 +00:00 committed by Gerrit Code Review
commit 4689591080
2 changed files with 63 additions and 2 deletions

View File

@ -721,6 +721,61 @@ class XIVProxyTest(test.TestCase):
ex = getattr(p, "_get_exception")()
self.assertRaises(ex, p._check_perf_class_on_backend, {'bw': '100'})
@mock.patch("cinder.volume.drivers.ibm.ibm_storage."
"xiv_proxy.XIVProxy._qos_create_kwargs_for_xcli",
mock.MagicMock(return_value={}))
def test_regex_from_perf_class_name(self):
"""Test type extraction from perf_class with Regex"""
driver = mock.MagicMock()
driver.VERSION = "VERSION"
p = self.proxy(
self.default_storage_info,
mock.MagicMock(),
test_mock.cinder.exception,
driver)
perf_class_names_list = [
{'class_name': 'cinder-qos_iops_1000_type_independent_bw_1000',
'type': 'independent'},
{'class_name': 'cinder-qos_iops_1000_bw_1000_type_shared',
'type': 'shared'},
{'class_name': 'cinder-qos_type_badtype_bw_1000',
'type': None}]
for element in perf_class_names_list:
_type = p._get_type_from_perf_class_name(
perf_class_name=element['class_name'])
self.assertEqual(element['type'], _type)
@mock.patch("cinder.volume.drivers.ibm.ibm_storage."
"xiv_proxy.XIVProxy._qos_create_kwargs_for_xcli",
mock.MagicMock(return_value={}))
def test_create_qos_class_with_type(self):
"""Test performance class creation with type"""
driver = mock.MagicMock()
driver.VERSION = "VERSION"
p = self.proxy(
self.default_storage_info,
mock.MagicMock(),
test_mock.cinder.exception,
driver)
p.ibm_storage_cli = mock.MagicMock()
p.ibm_storage_cli.cmd.perf_class_set_rate.return_value = None
p.ibm_storage_cli.cmd.perf_class_create.return_value = None
perf_class_name = 'cinder-qos_iops_1000_type_independent_bw_1000'
p_class_name = p._create_qos_class(perf_class_name=perf_class_name,
specs=None)
p.ibm_storage_cli.cmd.perf_class_create.assert_called_once_with(
perf_class=perf_class_name,
type='independent')
self.assertEqual('cinder-qos_iops_1000_type_independent_bw_1000',
p_class_name)
@mock.patch("cinder.volume.drivers.ibm.ibm_storage."
"xiv_proxy.XIVProxy._check_storage_version_for_qos_support",
mock.MagicMock(return_value=True))

View File

@ -14,9 +14,11 @@
# under the License.
#
import datetime
import re
import six
import socket
from oslo_log import log as logging
from oslo_utils import importutils
@ -384,13 +386,17 @@ class XIVProxy(proxy.IBMStorageProxy):
self._create_qos_class(perf_class_name, specs)
return perf_class_name
def _get_type_from_perf_class_name(self, perf_class_name):
_type = re.findall('type_(independent|shared)', perf_class_name)
return _type[0] if _type else None
def _create_qos_class(self, perf_class_name, specs):
"""Create the qos class on the backend."""
try:
# check if we have a shared (default) perf class
# or an independent perf class
if 'type_' in perf_class_name:
_type = perf_class_name.split('type_')[1]
_type = self._get_type_from_perf_class_name(perf_class_name)
if _type:
self._call_xiv_xcli("perf_class_create",
perf_class=perf_class_name,
type=_type)