Merge "Add version 3.0 of conductor RPC interface"

This commit is contained in:
Jenkins 2015-09-10 23:50:45 +00:00 committed by Gerrit Code Review
commit 31ef4f4b83
3 changed files with 58 additions and 17 deletions

View File

@ -95,6 +95,7 @@ class ConductorManager(manager.Manager):
self.compute_task_mgr = ComputeTaskManager()
self.cells_rpcapi = cells_rpcapi.CellsAPI()
self.additional_endpoints.append(self.compute_task_mgr)
self.additional_endpoints.append(_ConductorManagerV3Proxy(self))
@property
def network_api(self):
@ -905,3 +906,27 @@ class ComputeTaskManager(base.Base):
on_shared_storage=on_shared_storage,
preserve_ephemeral=preserve_ephemeral,
host=host)
class _ConductorManagerV3Proxy(object):
target = messaging.Target(version='3.0')
def __init__(self, manager):
self.manager = manager
def provider_fw_rule_get_all(self, context):
return self.manager.provider_fw_rule_get_all(context)
def object_class_action_versions(self, context, objname, objmethod,
object_versions, args, kwargs):
return self.manager.object_class_action_versions(
context, objname, objmethod, object_versions, args, kwargs)
def object_action(self, context, objinst, objmethod, args, kwargs):
return self.manager.object_action(context, objinst, objmethod, args,
kwargs)
def object_backport_versions(self, context, objinst, object_versions):
return self.manager.object_backport_versions(context, objinst,
object_versions)

View File

@ -189,6 +189,9 @@ class ConductorAPI(object):
* 2.3 - Add object_class_action_versions()
* Remove compute_node_create()
* Remove object_backport()
* 3.0 - Drop backwards compatibility
"""
VERSION_ALIASES = {
@ -201,7 +204,7 @@ class ConductorAPI(object):
def __init__(self):
super(ConductorAPI, self).__init__()
target = messaging.Target(topic=CONF.conductor.topic, version='2.0')
target = messaging.Target(topic=CONF.conductor.topic, version='3.0')
version_cap = self.VERSION_ALIASES.get(CONF.upgrade_levels.conductor,
CONF.upgrade_levels.conductor)
serializer = objects_base.NovaObjectSerializer()
@ -218,24 +221,16 @@ class ConductorAPI(object):
# operations, which will use the new class action handler.
def object_class_action(self, context, objname, objmethod, objver,
args, kwargs):
if self.client.can_send_version('2.3'):
# NOTE(danms): If we're new enough, collect the object
# version manifest and redirect the call to the newer
# class action handler
versions = ovo_base.obj_tree_get_versions(objname)
return self.object_class_action_versions(context,
objname,
objmethod,
versions,
args, kwargs)
cctxt = self.client.prepare()
return cctxt.call(context, 'object_class_action',
objname=objname, objmethod=objmethod,
objver=objver, args=args, kwargs=kwargs)
versions = ovo_base.obj_tree_get_versions(objname)
return self.object_class_action_versions(context,
objname,
objmethod,
versions,
args, kwargs)
def object_class_action_versions(self, context, objname, objmethod,
object_versions, args, kwargs):
cctxt = self.client.prepare(version='2.3')
cctxt = self.client.prepare()
return cctxt.call(context, 'object_class_action_versions',
objname=objname, objmethod=objmethod,
object_versions=object_versions,
@ -247,7 +242,7 @@ class ConductorAPI(object):
objmethod=objmethod, args=args, kwargs=kwargs)
def object_backport_versions(self, context, objinst, object_versions):
cctxt = self.client.prepare(version='2.2')
cctxt = self.client.prepare()
return cctxt.call(context, 'object_backport_versions', objinst=objinst,
object_versions=object_versions)

View File

@ -2066,3 +2066,24 @@ class ConductorLocalComputeTaskAPITestCase(ConductorTaskAPITestCase):
super(ConductorLocalComputeTaskAPITestCase, self).setUp()
self.conductor = conductor_api.LocalComputeTaskAPI()
self.conductor_manager = self.conductor._manager._target
class ConductorV3ManagerProxyTestCase(test.NoDBTestCase):
def test_v3_manager_proxy(self):
manager = conductor_manager.ConductorManager()
proxy = conductor_manager._ConductorManagerV3Proxy(manager)
ctxt = context.get_admin_context()
methods = [
# (method, number_of_args)
('provider_fw_rule_get_all', 0),
('object_class_action_versions', 5),
('object_action', 4),
('object_backport_versions', 2),
]
for method, num_args in methods:
args = range(num_args)
with mock.patch.object(manager, method) as mock_method:
getattr(proxy, method)(ctxt, *args)
mock_method.assert_called_once_with(ctxt, *args)