Merge "[NetApp] Fixed replica promotion to updated autosize attributes"
This commit is contained in:
commit
dc392dc81b
@ -2821,6 +2821,9 @@ class NetAppCmodeFileStorageLibrary(object):
|
||||
is_dr,
|
||||
share_server=share_server)
|
||||
|
||||
self._update_autosize_attributes_after_promote_replica(
|
||||
orig_active_replica, new_active_replica, dm_session)
|
||||
|
||||
return new_replica_list
|
||||
|
||||
def _unmount_orig_active_replica(self, orig_active_replica,
|
||||
@ -2842,6 +2845,87 @@ class NetAppCmodeFileStorageLibrary(object):
|
||||
LOG.exception("Could not unmount the original active replica %s.",
|
||||
orig_active_replica['id'])
|
||||
|
||||
def _get_replica_info(self, replica, dm_session):
|
||||
"""Retrieves a dict with the replica information.
|
||||
|
||||
:param replica: Share replica.
|
||||
:param dm_session: Data Motion session.
|
||||
|
||||
:return: A dict with the replica information.
|
||||
"""
|
||||
extra_specs = share_types.get_extra_specs_from_share(replica)
|
||||
provisioning_options = self._get_provisioning_options(extra_specs)
|
||||
replica_name = self._get_backend_share_name(replica['id'])
|
||||
vserver = dm_session.get_vserver_from_share(replica)
|
||||
|
||||
replica_backend = share_utils.extract_host(replica['host'],
|
||||
level='backend_name')
|
||||
|
||||
replica_client = data_motion.get_client_for_backend(
|
||||
replica_backend, vserver_name=vserver)
|
||||
|
||||
pool_name = share_utils.extract_host(replica['host'], level='pool')
|
||||
is_flexgroup = self._is_flexgroup_pool(pool_name)
|
||||
|
||||
if is_flexgroup:
|
||||
replica_aggregate = self._get_flexgroup_aggregate_list(pool_name)
|
||||
else:
|
||||
replica_aggregate = share_utils.extract_host(
|
||||
replica['host'], level='pool')
|
||||
|
||||
replica_info = {
|
||||
'client': replica_client,
|
||||
'aggregate': replica_aggregate,
|
||||
'name': replica_name,
|
||||
'provisioning_options': provisioning_options,
|
||||
}
|
||||
|
||||
return replica_info
|
||||
|
||||
def _update_autosize_attributes_after_promote_replica(
|
||||
self, orig_active_replica, new_active_replica, dm_session):
|
||||
"""Update autosize attributes after replica is promoted"""
|
||||
|
||||
# 1. Get the info from original active replica
|
||||
orig_active_replica_info = self._get_replica_info(
|
||||
orig_active_replica, dm_session)
|
||||
|
||||
# 2. Get the info from the promoted replica (new_active_replica)
|
||||
new_active_replica_info = self._get_replica_info(
|
||||
new_active_replica, dm_session)
|
||||
|
||||
# 3. Set autosize attributes for orig_active_replica
|
||||
|
||||
# Reset the autosize attributes according to the volume type (RW or DP)
|
||||
orig_active_replica_autosize_attributes = {'reset': 'true'}
|
||||
|
||||
orig_provisioning_opts = (
|
||||
orig_active_replica_info['provisioning_options'])
|
||||
|
||||
orig_provisioning_opts['autosize_attributes'] = (
|
||||
orig_active_replica_autosize_attributes)
|
||||
|
||||
orig_active_replica_info['client'].modify_volume(
|
||||
orig_active_replica_info['aggregate'],
|
||||
orig_active_replica_info['name'],
|
||||
**orig_provisioning_opts)
|
||||
|
||||
# 4. Set autosize attributes for new_active_replica
|
||||
|
||||
# Reset the autosize attributes according to the volume type (RW or DP)
|
||||
new_active_replica_autosize_attributes = {'reset': 'true'}
|
||||
|
||||
new_provisioning_opts = (
|
||||
new_active_replica_info['provisioning_options'])
|
||||
|
||||
new_provisioning_opts['autosize_attributes'] = (
|
||||
new_active_replica_autosize_attributes)
|
||||
|
||||
new_active_replica_info['client'].modify_volume(
|
||||
new_active_replica_info['aggregate'],
|
||||
new_active_replica_info['name'],
|
||||
**new_provisioning_opts)
|
||||
|
||||
def _handle_qos_on_replication_change(self, dm_session, new_active_replica,
|
||||
orig_active_replica, is_dr,
|
||||
share_server=None):
|
||||
|
@ -4471,7 +4471,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(self.library,
|
||||
'_is_readable_replica',
|
||||
mock.Mock(return_value=is_readable))
|
||||
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
replicas = self.library.promote_replica(
|
||||
None, [self.fake_replica, self.fake_replica_2],
|
||||
self.fake_replica_2, [], share_server=None)
|
||||
@ -4534,6 +4535,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(
|
||||
protocol_helper, 'cleanup_demoted_replica',
|
||||
mock.Mock(side_effect=exception.StorageCommunicationException))
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
mock_log = self.mock_object(lib_base.LOG, 'exception')
|
||||
|
||||
self.library.promote_replica(
|
||||
@ -4564,6 +4567,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(
|
||||
self.library, '_convert_destination_replica_to_independent',
|
||||
mock.Mock(side_effect=exception.StorageCommunicationException))
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
|
||||
replicas = self.library.promote_replica(
|
||||
None, [self.fake_replica, self.fake_replica_2],
|
||||
@ -4607,6 +4612,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(self.library,
|
||||
'_is_readable_replica',
|
||||
mock.Mock(return_value=False))
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
|
||||
replicas = self.library.promote_replica(
|
||||
None, [self.fake_replica, self.fake_replica_2, fake_replica_3],
|
||||
@ -4663,6 +4670,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(self.library,
|
||||
'_is_readable_replica',
|
||||
mock.Mock(return_value=False))
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
|
||||
replicas = self.library.promote_replica(
|
||||
None, [self.fake_replica, self.fake_replica_2],
|
||||
@ -4892,6 +4901,8 @@ class NetAppFileStorageLibraryTestCase(test.TestCase):
|
||||
self.mock_object(self.library,
|
||||
'_is_readable_replica',
|
||||
mock.Mock(return_value=False))
|
||||
self.mock_object(self.library,
|
||||
'_update_autosize_attributes_after_promote_replica')
|
||||
replicas = self.library.promote_replica(
|
||||
None, [self.fake_replica, self.fake_replica_2],
|
||||
self.fake_replica_2, fake_access_rules, share_server=None)
|
||||
|
@ -0,0 +1,7 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
NetApp driver: Fixed the issue with replica promotion where the autosize
|
||||
attributes were not being updated on ONTAP. Now, the autosize attributes
|
||||
are updated after promoting the replica. For more details, please refer to
|
||||
`launchpad bug #1957075 <https://bugs.launchpad.net/manila/+bug/1957075>`_
|
Loading…
x
Reference in New Issue
Block a user