[SVF]:Bulk create Hyperswap volume is failing.

[Spectrum Virtualize Family] During HyperSwap create volume
there is multiple lsmdiskgrp calls, which is causing more
concurrent calls on SVC.

This patch fixes the issue by caching the site information during
initialization and checking for HyperSwap pool site information.

Closes-Bug: #1917605
Change-Id: I3f734e55efeabcfdeca4c4f3e87bc4a5a0481875
This commit is contained in:
GirishChilukuri 2021-03-08 10:03:31 +00:00
parent babafa435c
commit e6ad644046
3 changed files with 46 additions and 10 deletions
cinder
tests/unit/volume/drivers/ibm
volume/drivers/ibm/storwize_svc
releasenotes/notes

@ -537,7 +537,7 @@ class StorwizeSVCManagementSimulator(object):
'vdisk_count', 'capacity', 'extent_size', 'vdisk_count', 'capacity', 'extent_size',
'free_capacity', 'virtual_capacity', 'used_capacity', 'free_capacity', 'virtual_capacity', 'used_capacity',
'real_capacity', 'overallocation', 'warning', 'real_capacity', 'overallocation', 'warning',
'easy_tier', 'easy_tier_status', 'site_id', 'easy_tier', 'easy_tier_status', 'site_id', 'site_name',
'data_reduction']) 'data_reduction'])
for i in range(pool_num): for i in range(pool_num):
row_data = [str(i + 1), row_data = [str(i + 1),
@ -546,32 +546,36 @@ class StorwizeSVCManagementSimulator(object):
'3573412790272', '256', '3529926246400', '3573412790272', '256', '3529926246400',
'1693247906775', '1693247906775',
'26843545600', '38203734097', '47', '80', 'auto', '26843545600', '38203734097', '47', '80', 'auto',
'inactive', '', 'no'] 'inactive', '', '', 'no']
rows.append(row_data) rows.append(row_data)
rows.append([str(pool_num + 1), 'openstack2', 'online', rows.append([str(pool_num + 1), 'openstack2', 'online',
'1', '0', '3573412790272', '256', '1', '0', '3573412790272', '256',
'3529432325160', '1693247906775', '26843545600', '3529432325160', '1693247906775', '26843545600',
'38203734097', '47', '80', 'auto', 'inactive', '', 'no']) '38203734097', '47', '80', 'auto', 'inactive', '', '',
'no'])
rows.append([str(pool_num + 2), 'openstack3', 'offline', rows.append([str(pool_num + 2), 'openstack3', 'offline',
'1', '0', '3573412790272', '128', '1', '0', '3573412790272', '128',
'3529432325160', '1693247906775', '26843545600', '3529432325160', '1693247906775', '26843545600',
'38203734097', '47', '80', 'auto', 'inactive', '', 'yes']) '38203734097', '47', '80', 'auto', 'inactive', '', '',
'yes'])
rows.append([str(pool_num + 3), 'hyperswap1', 'online', rows.append([str(pool_num + 3), 'hyperswap1', 'online',
'1', '0', '3573412790272', '256', '1', '0', '3573412790272', '256',
'3529432325160', '1693247906775', '26843545600', '3529432325160', '1693247906775', '26843545600',
'38203734097', '47', '80', 'auto', 'inactive', '1', 'no']) '38203734097', '47', '80', 'auto', 'inactive', '1',
'site1', 'no'])
rows.append([str(pool_num + 4), 'hyperswap2', 'online', rows.append([str(pool_num + 4), 'hyperswap2', 'online',
'1', '0', '3573412790272', '128', '1', '0', '3573412790272', '128',
'3529432325160', '1693247906775', '26843545600', '3529432325160', '1693247906775', '26843545600',
'38203734097', '47', '80', 'auto', 'inactive', '2', 'no']) '38203734097', '47', '80', 'auto', 'inactive', '2',
'site2', 'no'])
rows.append([str(pool_num + 5), 'dr_pool1', 'online', rows.append([str(pool_num + 5), 'dr_pool1', 'online',
'1', '0', '3573412790272', '128', '3529432325160', '1', '0', '3573412790272', '128', '3529432325160',
'1693247906775', '26843545600', '38203734097', '47', '80', '1693247906775', '26843545600', '38203734097', '47', '80',
'auto', 'inactive', '1', 'yes']) 'auto', 'inactive', '1', 'site1', 'yes'])
rows.append([str(pool_num + 6), 'dr_pool2', 'online', rows.append([str(pool_num + 6), 'dr_pool2', 'online',
'1', '0', '3573412790272', '128', '3529432325160', '1', '0', '3573412790272', '128', '3529432325160',
'1693247906775', '26843545600', '38203734097', '47', '80', '1693247906775', '26843545600', '38203734097', '47', '80',
'auto', 'inactive', '2', 'yes']) 'auto', 'inactive', '2', 'site2', 'yes'])
if 'obj' not in kwargs: if 'obj' not in kwargs:
return self._print_info_cmd(rows=rows, **kwargs) return self._print_info_cmd(rows=rows, **kwargs)
else: else:

@ -2649,8 +2649,19 @@ class StorwizeHelpers(object):
raise exception.InvalidInput( raise exception.InvalidInput(
reason=_('The peer pool is necessary for hyperswap volume, ' reason=_('The peer pool is necessary for hyperswap volume, '
'please configure the peer pool.')) 'please configure the peer pool.'))
pool_attr = None
peer_pool_attr = None
for stat_pool in self.stats.get('pools', []):
if stat_pool['pool_name'] == pool:
pool_attr = stat_pool
elif stat_pool['pool_name'] == peer_pool:
peer_pool_attr = stat_pool
if pool_attr is None:
pool_attr = self.get_pool_attrs(pool) pool_attr = self.get_pool_attrs(pool)
if peer_pool_attr is None:
peer_pool_attr = self.get_pool_attrs(peer_pool) peer_pool_attr = self.get_pool_attrs(peer_pool)
if not peer_pool_attr: if not peer_pool_attr:
raise exception.InvalidInput( raise exception.InvalidInput(
reason=_('The hyperswap peer pool %s ' reason=_('The hyperswap peer pool %s '
@ -2970,6 +2981,10 @@ class StorwizeSVCCommonDriver(san.SanDriver,
self._secondary_pools = [self._replica_target.get('pool_name')] self._secondary_pools = [self._replica_target.get('pool_name')]
return self._secondary_pools return self._secondary_pools
def _get_backend_peer_pool(self):
if not self._active_backend_id:
return self.configuration.storwize_peer_pool
def _validate_pools_exist(self): def _validate_pools_exist(self):
# Validate that the pool exists # Validate that the pool exists
pools = self._get_backend_pools() pools = self._get_backend_pools()
@ -5695,6 +5710,12 @@ class StorwizeSVCCommonDriver(san.SanDriver,
data['pools'] = [self._build_pool_stats(pool) data['pools'] = [self._build_pool_stats(pool)
for pool in for pool in
self._get_backend_pools()] self._get_backend_pools()]
if self._helpers.is_system_topology_hyperswap(self._state):
peer_pool = self._get_backend_peer_pool()
if peer_pool:
data['pools'].append(self._build_pool_stats(peer_pool))
if self._replica_enabled: if self._replica_enabled:
data['replication'] = self._replica_enabled data['replication'] = self._replica_enabled
data['replication_enabled'] = self._replica_enabled data['replication_enabled'] = self._replica_enabled
@ -5758,6 +5779,8 @@ class StorwizeSVCCommonDriver(san.SanDriver,
'consistent_group_snapshot_enabled': True, 'consistent_group_snapshot_enabled': True,
'backend_state': backend_state, 'backend_state': backend_state,
'data_reduction': is_dr_pool, 'data_reduction': is_dr_pool,
'site_id': pool_data['site_id'],
'site_name': pool_data['site_name'],
} }
if self._replica_enabled: if self._replica_enabled:
pool_stats.update({ pool_stats.update({
@ -5780,6 +5803,8 @@ class StorwizeSVCCommonDriver(san.SanDriver,
'max_over_subscription_ratio': 0, 'max_over_subscription_ratio': 0,
'reserved_percentage': 0, 'reserved_percentage': 0,
'data_reduction': is_dr_pool, 'data_reduction': is_dr_pool,
'site_id': None,
'site_name': None,
'backend_state': 'down'} 'backend_state': 'down'}
return pool_stats return pool_stats

@ -0,0 +1,7 @@
---
fixes:
- |
IBM Spectrum Virtualize Family driver `Bug #1917605
<https://bugs.launchpad.net/cinder/+bug/1917605>`_: Fixed issue
in StorwizeSVCCommonDriver to save site and peer pool information
in stats during initialization.