Merge "IBM XIV: fix issues for replication"

This commit is contained in:
Zuul 2018-08-07 19:46:27 +00:00 committed by Gerrit Code Review
commit 20c698bb0a
3 changed files with 42 additions and 9 deletions

View File

@ -691,6 +691,32 @@ class XIVProxyTest(test.TestCase):
resource_id=group['name'],
new_role='Slave')
@mock.patch("cinder.volume.drivers.ibm.ibm_storage."
"xiv_proxy.XIVProxy._get_target_params",
mock.MagicMock(return_value=REPLICA_PARAMS))
def test_pool_with_replication_failover_back(self):
driver = mock.MagicMock()
driver.VERSION = "VERSION"
p = self.proxy(
self.default_storage_info,
mock.MagicMock(),
test_mock.cinder.exception,
driver)
pool_name = p._get_backend_pool()
self.assertEqual(self.default_storage_info['vol_pool'], pool_name)
p_failback = self.proxy(
self.default_storage_info,
mock.MagicMock(),
test_mock.cinder.exception,
driver,
REPLICA_ID)
pool_name = p_failback._get_backend_pool()
self.assertEqual(REPLICA_POOL, pool_name)
@mock.patch("cinder.volume.utils.is_group_a_cg_snapshot_type",
mock.MagicMock(return_value=True))
def test_create_volume_with_consistency_group(self):

View File

@ -360,7 +360,7 @@ class IBMStorageProxy(object):
if not self.targets:
return None
try:
target = self.targets.keys().next()
target = list(self.targets.keys())[0]
return target
except Exception:
return None

View File

@ -448,7 +448,7 @@ class XIVProxy(proxy.IBMStorageProxy):
def _create_volume(self, volume):
"""Internal implementation to create a volume."""
size = storage.gigabytes_to_blocks(float(volume['size']))
pool = self.storage_info[storage.FLAG_KEYS['storage_pool']]
pool = self._get_backend_pool()
try:
self._call_xiv_xcli(
"vol_create", vol=volume['name'], size_blocks=size, pool=pool)
@ -1510,7 +1510,7 @@ class XIVProxy(proxy.IBMStorageProxy):
if (dest != strings.XIV_BACKEND_PREFIX or dest_host != volume_host):
return False
pool_name = self.storage_info[storage.FLAG_KEYS['storage_pool']]
pool_name = self._get_backend_pool()
# if pool is different. else - we're on the same pool and retype is ok.
if (pool_name != dest_pool):
@ -1611,17 +1611,24 @@ class XIVProxy(proxy.IBMStorageProxy):
@proxy._trace_time
def _get_pool(self):
pool_name = self._get_backend_pool()
pools = self._call_xiv_xcli(
"pool_list", pool=self.storage_info[
storage.FLAG_KEYS['storage_pool']]).as_list
"pool_list", pool=pool_name).as_list
if not pools:
msg = (_(
"Pool %(pool)s not available on storage") %
{'pool': self.storage_info[storage.FLAG_KEYS['storage_pool']]})
{'pool': pool_name})
LOG.error(msg)
raise self.meta['exception'].VolumeBackendAPIException(data=msg)
return pools
def _get_backend_pool(self):
if self.active_backend_id == strings.PRIMARY_BACKEND_ID:
return self.storage_info[storage.FLAG_KEYS['storage_pool']]
else:
return self._get_target_params(
self.active_backend_id)['san_clustername']
def _retrieve_pool_stats(self, data):
try:
pools = self._get_pool()
@ -2419,7 +2426,7 @@ class XIVProxy(proxy.IBMStorageProxy):
return fc_targets
def _get_pool_domain(self, connector):
pool_name = self.storage_info[storage.FLAG_KEYS['storage_pool']]
pool_name = self._get_backend_pool()
LOG.debug("pool name from configuration: %s", pool_name)
domain = None
try:
@ -2524,7 +2531,7 @@ class XIVProxy(proxy.IBMStorageProxy):
LOG.debug("send event SERVICE_STARTED")
service_start_evnt_prop = {
"openstack_version": self.meta['openstack_version'],
"pool_name": self.storage_info[storage.FLAG_KEYS['storage_pool']]}
"pool_name": self._get_backend_pool()}
ev_mgr = events.EventsManager(self.ibm_storage_cli,
OPENSTACK_PRODUCT_NAME,
self.full_version)
@ -2537,7 +2544,7 @@ class XIVProxy(proxy.IBMStorageProxy):
compute_host_name = socket.getfqdn()
vol_attach_evnt_prop = {
"openstack_version": self.meta['openstack_version'],
"pool_name": self.storage_info[storage.FLAG_KEYS['storage_pool']],
"pool_name": self._get_backend_pool(),
"compute_hostname": compute_host_name}
ev_mgr = events.EventsManager(self.ibm_storage_cli,