Merge "Add version 3.0 of conductor RPC interface"
This commit is contained in:
commit
31ef4f4b83
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue