Empty option value maybe cause Unity driver failed to initialize

If the value of list type option is empty, Unity driver may failed to
initialize.

Example:
unity_io_ports=
unity_storage_pool_names=

Change-Id: Ib5850d984bfd3651d308f448993251e9ec5a9460
Closes-bug: #1775518
(cherry picked from commit 2ecfd6144b)
(cherry picked from commit c7f9d29e17)
This commit is contained in:
Yong Huang
2018-06-07 14:39:13 +08:00
parent 13d65a90f5
commit b8b5de9853
5 changed files with 38 additions and 6 deletions

View File

@@ -129,7 +129,8 @@ class UnityDriverTest(unittest.TestCase):
def test_default_initialize(self): def test_default_initialize(self):
config = conf.Configuration(None) config = conf.Configuration(None)
iscsi_driver = driver.UnityDriver(configuration=config) iscsi_driver = driver.UnityDriver(configuration=config)
self.assertIsNone(config.unity_storage_pool_names) self.assertListEqual([], config.unity_storage_pool_names)
self.assertListEqual([], config.unity_io_ports)
self.assertTrue(config.san_thin_provision) self.assertTrue(config.san_thin_provision)
self.assertEqual('', config.san_ip) self.assertEqual('', config.san_ip)
self.assertEqual('admin', config.san_login) self.assertEqual('admin', config.san_login)

View File

@@ -254,3 +254,24 @@ class UnityUtilsTest(unittest.TestCase):
ret = utils.get_backend_qos_specs(volume) ret = utils.get_backend_qos_specs(volume)
expected = {'maxBWS': 2, 'id': 'max_2_mbps', 'maxIOPS': None} expected = {'maxBWS': 2, 'id': 'max_2_mbps', 'maxIOPS': None}
self.assertEqual(expected, ret) self.assertEqual(expected, ret)
def test_remove_empty(self):
option = mock.Mock()
value_list = [' pool1', 'pool2 ', ' pool3 ']
ret = utils.remove_empty(option, value_list)
expected = ['pool1', 'pool2', 'pool3']
self.assertListEqual(expected, ret)
def test_remove_empty_none(self):
option = mock.Mock()
value_list = None
ret = utils.remove_empty(option, value_list)
expected = None
self.assertEqual(expected, ret)
def test_remove_empty_empty_list(self):
option = mock.Mock()
value_list = []
ret = utils.remove_empty(option, value_list)
expected = None
self.assertEqual(expected, ret)

View File

@@ -31,11 +31,11 @@ CONF = cfg.CONF
UNITY_OPTS = [ UNITY_OPTS = [
cfg.ListOpt('unity_storage_pool_names', cfg.ListOpt('unity_storage_pool_names',
default=None, default=[],
help='A comma-separated list of storage pool names to be ' help='A comma-separated list of storage pool names to be '
'used.'), 'used.'),
cfg.ListOpt('unity_io_ports', cfg.ListOpt('unity_io_ports',
default=None, default=[],
help='A comma-separated list of iSCSI or FC ports to be used. ' help='A comma-separated list of iSCSI or FC ports to be used. '
'Each port can be Unix-style glob expressions.'), 'Each port can be Unix-style glob expressions.'),
cfg.BoolOpt('remove_empty_host', cfg.BoolOpt('remove_empty_host',
@@ -63,9 +63,12 @@ class UnityDriver(driver.ManageableVD,
2.0.2 - Support remove empty host 2.0.2 - Support remove empty host
2.0.3 - Cherry-pick the fix for 1773305 to return the targets which 2.0.3 - Cherry-pick the fix for 1773305 to return the targets which
connect to the logged-out initiators connect to the logged-out initiators
2.0.4 - Fixes bug 1775518 to make sure driver succeed to initialize
even though the value of unity_io_ports and
unity_storage_pool_names are empty
""" """
VERSION = '02.00.03' VERSION = '02.00.04'
VENDOR = 'Dell EMC' VENDOR = 'Dell EMC'
# ThirdPartySystems wiki page # ThirdPartySystems wiki page
CI_WIKI_NAME = "EMC_UNITY_CI" CI_WIKI_NAME = "EMC_UNITY_CI"

View File

@@ -270,12 +270,13 @@ def get_backend_qos_specs(volume):
def remove_empty(option, value_list): def remove_empty(option, value_list):
if value_list is not None: if value_list:
value_list = list(filter(None, map(str.strip, value_list))) value_list = list(filter(None, map(str.strip, value_list)))
if not value_list: if not value_list:
raise exception.InvalidConfigurationValue(option=option, raise exception.InvalidConfigurationValue(option=option,
value=value_list) value=value_list)
return value_list return value_list
return None
def match_any(full, patterns): def match_any(full, patterns):

View File

@@ -0,0 +1,6 @@
---
fixes:
- |
Dell EMC Unity: Fixes bug 1775518 to make sure driver succeed
to initialize even though the value of unity_io_ports and
unity_storage_pool_names are empty