Merge "Add the share-type for the server setup metadata"
This commit is contained in:
commit
2fb8a15369
@ -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']
|
||||
|
@ -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'])
|
||||
|
@ -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):
|
||||
|
@ -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')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user