[storwize]:Fixed select_io_group issues
Fixed issues in select_io_group that impacts the performance during Create_volume, Group Snapshot/Clone operations for bulk non-hyperswap volumes. select_io_grp can avoid get_pool_attrs if the topology is not hyperswap. closes bug: #1890588 Change-Id: Ibee878cfe86c82ad4c79247f2a3bd37f08be80b8
This commit is contained in:
parent
0ba9b86e62
commit
e554a61844
@ -7181,6 +7181,7 @@ class StorwizeSVCCommonDriverTestCase(test.TestCase):
|
|||||||
|
|
||||||
pool = 'openstack2'
|
pool = 'openstack2'
|
||||||
opts['iogrp'] = '0,1'
|
opts['iogrp'] = '0,1'
|
||||||
|
opts['volume_topology'] = 'hyperswap'
|
||||||
state['available_iogrps'] = [0, 1, 2, 3]
|
state['available_iogrps'] = [0, 1, 2, 3]
|
||||||
iog = self.driver._helpers.select_io_group(state, opts, pool)
|
iog = self.driver._helpers.select_io_group(state, opts, pool)
|
||||||
self.assertEqual(0, iog)
|
self.assertEqual(0, iog)
|
||||||
@ -8275,6 +8276,66 @@ class StorwizeHelpersTestCase(test.TestCase):
|
|||||||
# system io groups
|
# system io groups
|
||||||
state = {}
|
state = {}
|
||||||
|
|
||||||
|
lsmdiskgrp.return_value = {}
|
||||||
|
fake_iog_vdc1 = {0: 10, 1: 50, 2: 50, 3: 300}
|
||||||
|
fake_iog_vdc2 = {0: 2, 1: 1, 2: 200}
|
||||||
|
fake_iog_vdc3 = {0: 2, 2: 200}
|
||||||
|
fake_iog_vdc4 = {0: 100, 1: 100, 2: 100, 3: 100}
|
||||||
|
fake_iog_vdc5 = {0: 10, 1: 1, 2: 200, 3: 300}
|
||||||
|
|
||||||
|
get_vdisk_count_by_io_group.side_effect = [fake_iog_vdc1,
|
||||||
|
fake_iog_vdc2,
|
||||||
|
fake_iog_vdc3,
|
||||||
|
fake_iog_vdc4,
|
||||||
|
fake_iog_vdc5]
|
||||||
|
pool = _get_test_pool(False)
|
||||||
|
opts['volume_topology'] = None
|
||||||
|
opts['iogrp'] = '0,2'
|
||||||
|
state['available_iogrps'] = [0, 1, 2, 3]
|
||||||
|
|
||||||
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
self.assertTrue(iog in state['available_iogrps'])
|
||||||
|
self.assertEqual(0, iog)
|
||||||
|
|
||||||
|
opts['iogrp'] = '0'
|
||||||
|
state['available_iogrps'] = [0, 1, 2]
|
||||||
|
|
||||||
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
self.assertTrue(iog in state['available_iogrps'])
|
||||||
|
self.assertEqual(0, iog)
|
||||||
|
|
||||||
|
opts['iogrp'] = '1,2'
|
||||||
|
state['available_iogrps'] = [0, 2]
|
||||||
|
|
||||||
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
self.assertTrue(iog in state['available_iogrps'])
|
||||||
|
self.assertEqual(2, iog)
|
||||||
|
|
||||||
|
opts['iogrp'] = ' 0, 1, 2 '
|
||||||
|
state['available_iogrps'] = [0, 1, 2, 3]
|
||||||
|
|
||||||
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
self.assertTrue(iog in state['available_iogrps'])
|
||||||
|
# since vdisk count in all iogroups is same, it will pick the first
|
||||||
|
self.assertEqual(0, iog)
|
||||||
|
|
||||||
|
opts['iogrp'] = '0,1,2, 3'
|
||||||
|
state['available_iogrps'] = [0, 1, 2, 3]
|
||||||
|
|
||||||
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
self.assertTrue(iog in state['available_iogrps'])
|
||||||
|
self.assertEqual(1, iog)
|
||||||
|
|
||||||
|
@mock.patch.object(storwize_svc_common.StorwizeSSH, 'lsmdiskgrp')
|
||||||
|
@mock.patch.object(storwize_svc_common.StorwizeHelpers,
|
||||||
|
'get_vdisk_count_by_io_group')
|
||||||
|
def test_select_io_group_hyperswap(self, get_vdisk_count_by_io_group,
|
||||||
|
lsmdiskgrp):
|
||||||
|
# given io groups
|
||||||
|
opts = {}
|
||||||
|
# system io groups
|
||||||
|
state = {}
|
||||||
|
|
||||||
lsmdiskgrp.return_value = {}
|
lsmdiskgrp.return_value = {}
|
||||||
fake_iog_vdc1 = {0: 100, 1: 50, 2: 50, 3: 300}
|
fake_iog_vdc1 = {0: 100, 1: 50, 2: 50, 3: 300}
|
||||||
fake_iog_vdc2 = {0: 2, 1: 1, 2: 200}
|
fake_iog_vdc2 = {0: 2, 1: 1, 2: 200}
|
||||||
@ -8289,6 +8350,7 @@ class StorwizeHelpersTestCase(test.TestCase):
|
|||||||
fake_iog_vdc5]
|
fake_iog_vdc5]
|
||||||
pool = _get_test_pool(False)
|
pool = _get_test_pool(False)
|
||||||
opts['iogrp'] = '0,2'
|
opts['iogrp'] = '0,2'
|
||||||
|
opts['volume_topology'] = 'hyperswap'
|
||||||
state['available_iogrps'] = [0, 1, 2, 3]
|
state['available_iogrps'] = [0, 1, 2, 3]
|
||||||
|
|
||||||
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
iog = self.storwize_svc_common.select_io_group(state, opts, pool)
|
||||||
|
@ -871,12 +871,14 @@ class StorwizeHelpers(object):
|
|||||||
'avail': state['available_iogrps']})
|
'avail': state['available_iogrps']})
|
||||||
|
|
||||||
site_iogrp = []
|
site_iogrp = []
|
||||||
|
hyperswap = opts['volume_topology'] == 'hyperswap'
|
||||||
|
if hyperswap:
|
||||||
pool_data = self.get_pool_attrs(pool)
|
pool_data = self.get_pool_attrs(pool)
|
||||||
if pool_data is None:
|
if pool_data is None:
|
||||||
msg = (_('Failed getting details for pool %s.') % pool)
|
msg = (_('Failed getting details for pool %s.') % pool)
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
raise exception.InvalidConfigurationValue(message=msg)
|
raise exception.InvalidConfigurationValue(message=msg)
|
||||||
if 'site_id' in pool_data and pool_data['site_id']:
|
if hyperswap and pool_data.get('site_id'):
|
||||||
for node in state['storage_nodes'].values():
|
for node in state['storage_nodes'].values():
|
||||||
if pool_data['site_id'] == node['site_id']:
|
if pool_data['site_id'] == node['site_id']:
|
||||||
site_iogrp.append(node['IO_group'])
|
site_iogrp.append(node['IO_group'])
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
`Bug #1890588 <https://bugs.launchpad.net/cinder/+bug/1890588>`_:
|
||||||
|
IBM Storwize: Fixed issues in select_io_group that impacts the
|
||||||
|
performance during Create_volume, Group Snapshot/Clone operations
|
||||||
|
for bulk non-hyperswap volumes.
|
Loading…
Reference in New Issue
Block a user