Merge "Add the share-type for the server setup metadata"

This commit is contained in:
Zuul 2020-09-04 00:38:36 +00:00 committed by Gerrit Code Review
commit 2fb8a15369
4 changed files with 82 additions and 22 deletions

View File

@ -210,7 +210,7 @@ def add_hooks(f):
class ShareManager(manager.SchedulerDependentManager):
"""Manages NAS storages."""
RPC_API_VERSION = '1.19'
RPC_API_VERSION = '1.20'
def __init__(self, share_driver=None, service_name=None, *args, **kwargs):
"""Load the driver from args, or from flags."""
@ -638,18 +638,24 @@ class ShareManager(manager.SchedulerDependentManager):
with_share_data=True
)
if create_on_backend:
metadata = {'request_host': share_instance['host']}
metadata = self._build_server_metadata(
share_instance['host'], share_instance['share_type_id'])
compatible_share_server = (
self._create_share_server_in_backend(
context, compatible_share_server,
metadata=metadata))
context, compatible_share_server, metadata))
return compatible_share_server, share_instance_ref
return _wrapped_provide_share_server_for_share()
def _build_server_metadata(self, host, share_type_id):
return {
'request_host': host,
'share_type_id': share_type_id,
}
def _create_share_server_in_backend(self, context, share_server,
metadata=None):
metadata):
"""Perform setup_server on backend
:param metadata: A dictionary, to be passed to driver's setup_server()
@ -657,8 +663,7 @@ class ShareManager(manager.SchedulerDependentManager):
if share_server['status'] == constants.STATUS_CREATING:
# Create share server on backend with data from db.
share_server = self._setup_server(context, share_server,
metadata=metadata)
share_server = self._setup_server(context, share_server, metadata)
LOG.info("Share server created successfully.")
else:
LOG.info("Using preexisting share server: "
@ -666,7 +671,8 @@ class ShareManager(manager.SchedulerDependentManager):
{'share_server_id': share_server['id']})
return share_server
def create_share_server(self, context, share_server_id):
def create_share_server(
self, context, share_server_id, share_instance_id):
"""Invoked to create a share server in this backend.
This method is invoked to create the share server defined in the model
@ -674,10 +680,15 @@ class ShareManager(manager.SchedulerDependentManager):
:param context: The 'context.RequestContext' object for the request.
:param share_server_id: The id of the server to be created.
:param share_instance_id: The id of the share instance
"""
share_server = self.db.share_server_get(context, share_server_id)
share = self.db.share_instance_get(
context, share_instance_id, with_share_data=True)
metadata = self._build_server_metadata(share['host'],
share['share_type_id'])
self._create_share_server_in_backend(context, share_server)
self._create_share_server_in_backend(context, share_server, metadata)
def provide_share_server(self, context, share_instance_id,
share_network_id, snapshot_id=None):
@ -808,8 +819,11 @@ class ShareManager(manager.SchedulerDependentManager):
if compatible_share_server['status'] == constants.STATUS_CREATING:
# Create share server on backend with data from db.
metadata = self._build_server_metadata(
share_group_ref['host'],
share_group_ref['share_types'][0]['share_type_id'])
compatible_share_server = self._setup_server(
context, compatible_share_server)
context, compatible_share_server, metadata)
LOG.info("Share server created successfully.")
else:
LOG.info("Used preexisting share server "
@ -3685,7 +3699,7 @@ class ShareManager(manager.SchedulerDependentManager):
}
return network_info
def _setup_server(self, context, share_server, metadata=None):
def _setup_server(self, context, share_server, metadata):
try:
share_network_subnet = share_server['share_network_subnet']
share_network_subnet_id = share_network_subnet['id']

View File

@ -76,6 +76,7 @@ class ShareAPI(object):
1.17 - Add snapshot_update_access()
1.18 - Remove unused "share_id" parameter from revert_to_snapshot()
1.19 - Add manage_share_server() and unmanage_share_server()
1.20 - Add share_instance_id parameter for create_share_server() method
"""
BASE_RPC_API_VERSION = '1.0'
@ -84,7 +85,7 @@ class ShareAPI(object):
super(ShareAPI, self).__init__()
target = messaging.Target(topic=CONF.share_topic,
version=self.BASE_RPC_API_VERSION)
self.client = rpc.get_client(target, version_cap='1.19')
self.client = rpc.get_client(target, version_cap='1.20')
def create_share_instance(self, context, share_instance, host,
request_spec, filter_properties,
@ -355,10 +356,11 @@ class ShareAPI(object):
def create_share_server(self, context, share_instance, share_server_id):
new_host = utils.extract_host(share_instance['host'])
call_context = self.client.prepare(server=new_host, version='1.12')
call_context = self.client.prepare(server=new_host, version='1.20')
call_context.cast(context,
'create_share_server',
share_server_id=share_server_id)
share_server_id=share_server_id,
share_instance_id=share_instance['id'])
def snapshot_update_access(self, context, snapshot_instance):
host = utils.extract_host(snapshot_instance['share_instance']['host'])

View File

@ -2165,8 +2165,15 @@ class ShareManagerTestCase(test.TestCase):
)
fake_share = db_utils.create_share(
share_network_id=share_network['id'], size=1)
fake_metadata = {
'request_host': 'fake_host',
'share_type_id': 'fake_share_type_id',
}
fake_server = db_utils.create_share_server(
id='fake_srv_id', status=constants.STATUS_CREATING)
self.mock_object(self.share_manager, '_build_server_metadata',
mock.Mock(return_value=fake_metadata))
self.mock_object(db, 'share_server_create',
mock.Mock(return_value=fake_server))
self.mock_object(db, 'share_instance_update',
@ -2214,7 +2221,7 @@ class ShareManagerTestCase(test.TestCase):
])
self.share_manager._setup_server.assert_called_once_with(
utils.IsAMatcher(context.RequestContext), fake_server,
metadata={'request_host': 'fake_host'})
fake_metadata)
manager.LOG.error.assert_called_with(mock.ANY,
fake_share.instance['id'])
self.share_manager.message_api.create.assert_called_once_with(
@ -2326,6 +2333,13 @@ class ShareManagerTestCase(test.TestCase):
'id': 'fake_srv_id',
'status': constants.STATUS_CREATING,
}
fake_metadata = {
'request_host': 'fake_host',
'share_type_id': 'fake_share_type_id',
}
self.mock_object(self.share_manager, '_build_server_metadata',
mock.Mock(return_value=fake_metadata))
self.mock_object(db, 'share_server_create',
mock.Mock(return_value=fake_server))
self.mock_object(self.share_manager, '_setup_server',
@ -2343,7 +2357,7 @@ class ShareManagerTestCase(test.TestCase):
utils.IsAMatcher(context.RequestContext), mock.ANY)
self.share_manager._setup_server.assert_called_once_with(
utils.IsAMatcher(context.RequestContext), fake_server,
metadata={'request_host': 'fake_host'})
fake_metadata)
def test_create_share_instance_update_replica_state(self):
share_net = db_utils.create_share_network()
@ -2362,6 +2376,12 @@ class ShareManagerTestCase(test.TestCase):
'id': 'fake_srv_id',
'status': constants.STATUS_CREATING,
}
fake_metadata = {
'request_host': 'fake_host',
'share_type_id': 'fake_share_type_id',
}
self.mock_object(self.share_manager, '_build_server_metadata',
mock.Mock(return_value=fake_metadata))
self.mock_object(db, 'share_server_create',
mock.Mock(return_value=fake_server))
self.mock_object(self.share_manager, '_setup_server',
@ -2384,7 +2404,7 @@ class ShareManagerTestCase(test.TestCase):
utils.IsAMatcher(context.RequestContext), mock.ANY)
self.share_manager._setup_server.assert_called_once_with(
utils.IsAMatcher(context.RequestContext), fake_server,
metadata={'request_host': 'fake_host'})
fake_metadata)
@mock.patch('manila.tests.fake_notifier.FakeNotifier._notify')
def test_create_delete_share_instance(self, mock_notify):
@ -3220,7 +3240,7 @@ class ShareManagerTestCase(test.TestCase):
# execute method _setup_server
result = self.share_manager._setup_server(
self.context, share_server, metadata=metadata)
self.context, share_server, metadata)
# verify results
self.assertEqual(share_server, result)
@ -3287,7 +3307,7 @@ class ShareManagerTestCase(test.TestCase):
# execute method _setup_server
result = self.share_manager._setup_server(
self.context, share_server, metadata=metadata)
self.context, share_server, metadata)
# verify results
self.assertEqual(share_server, result)
@ -3308,6 +3328,7 @@ class ShareManagerTestCase(test.TestCase):
def setup_server_raise_exception(self, detail_data_proper):
# Setup required test data
metadata = {'fake_metadata_key': 'fake_metadata_value'}
server_info = {'details_key': 'value'}
share_network = {'id': 'fake_sn_id'}
share_net_subnet = {'id': 'fake_sns_id',
@ -3350,6 +3371,7 @@ class ShareManagerTestCase(test.TestCase):
self.share_manager._setup_server,
self.context,
share_server,
metadata,
)
# verify results
@ -3400,6 +3422,7 @@ class ShareManagerTestCase(test.TestCase):
share_server = db_utils.create_share_server(
id='fake', share_network_subnet_id=share_net_subnet['id'])
details = get_server_details_from_data(data)
metadata = {'fake_metadata_key': 'fake_metadata_value'}
exc_mock = mock.Mock(side_effect=exception.ManilaException(**data))
details_mock = mock.Mock(side_effect=exception.ManilaException())
@ -3417,6 +3440,7 @@ class ShareManagerTestCase(test.TestCase):
self.share_manager._setup_server,
self.context,
share_server,
metadata,
)
self.assertTrue(self.share_manager.db.share_network_get.called)
@ -5935,21 +5959,32 @@ class ShareManagerTestCase(test.TestCase):
def test_create_share_server(self):
server = db_utils.create_share_server()
share = db_utils.create_share()
fake_metadata = {
'request_host': 'fake_host',
'share_type_id': 'fake_share_type_id',
}
# mocks
self.mock_object(self.share_manager.db, 'share_server_get',
mock.Mock(return_value=server))
self.mock_object(self.share_manager.db, 'share_instance_get',
mock.Mock(return_value=share))
self.mock_object(self.share_manager, '_create_share_server_in_backend')
self.mock_object(self.share_manager, '_build_server_metadata',
mock.Mock(return_value=fake_metadata))
# run
self.share_manager.create_share_server(
self.context, 'server_id')
self.context, 'server_id', 'share_instance_id')
# asserts
self.share_manager.db.share_server_get.assert_called_once_with(
self.context, 'server_id')
self.share_manager.db.share_instance_get.assert_called_once_with(
self.context, 'share_instance_id', with_share_data=True)
(self.share_manager._create_share_server_in_backend.
assert_called_once_with(self.context, server))
assert_called_once_with(self.context, server, fake_metadata))
@ddt.data({'admin_network_api': mock.Mock(),
'driver_return': ('new_identifier', {'some_id': 'some_value'})},
@ -7632,6 +7667,15 @@ class ShareManagerTestCase(test.TestCase):
resource_id=instance['share_id'],
detail=message_field.Detail.DRIVER_FAILED_CREATING_FROM_SNAP)
def test__build_server_metadata(self):
share = {'host': 'host', 'share_type_id': 'id'}
expected_metadata = {'request_host': 'host', 'share_type_id': 'id'}
metadata = self.share_manager._build_server_metadata(
share['host'], share['share_type_id'])
self.assertDictEqual(expected_metadata, metadata)
@ddt.ddt
class HookWrapperTestCase(test.TestCase):

View File

@ -378,7 +378,7 @@ class ShareRpcAPITestCase(test.TestCase):
def test_create_share_server(self):
self._test_share_api('create_share_server',
rpc_method='cast',
version='1.12',
version='1.20',
share_instance=self.fake_share['instance'],
share_server_id='fake_server_id')