From 2b100e15002fb07c9eeb1497ca11c4c42bab1ba3 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Mon, 10 Dec 2012 14:58:35 -0500 Subject: Add get_backdoor_port to nova-conductor. This adds a get_backdoor_port function to nova conductor which enables returning the eventlet_backdoor port from rpc for the service. Change-Id: Ifb08c685a6f52621e954ba84e3c5eadf83fe4704 --- nova/conductor/api.py | 10 ++++++++++ nova/conductor/manager.py | 5 ++++- nova/conductor/rpcapi.py | 5 +++++ nova/tests/conductor/test_conductor.py | 25 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/nova/conductor/api.py b/nova/conductor/api.py index fe4f6ca98..b9013c4c6 100644 --- a/nova/conductor/api.py +++ b/nova/conductor/api.py @@ -16,6 +16,7 @@ from nova.conductor import manager from nova.conductor import rpcapi +from nova import exception as exc from nova.openstack.common import cfg conductor_opts = [ @@ -76,6 +77,9 @@ class LocalAPI(object): last_ctr_in, last_ctr_out, last_refreshed) + def get_backdoor_port(self, context, host): + raise exc.InvalidRequest + class API(object): """Conductor API that does updates via RPC to the ConductorManager""" @@ -121,3 +125,9 @@ class API(object): context, uuid, mac, start_period, bw_in, bw_out, last_ctr_in, last_ctr_out, last_refreshed) + + #NOTE(mtreinish): This doesn't work on multiple conductors without any + # topic calculation in conductor_rpcapi. So the host param isn't used + # currently. + def get_backdoor_port(self, context, host): + return self.conductor_rpcapi.get_backdoor_port(context) diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py index 4a37b9dfb..796b99360 100644 --- a/nova/conductor/manager.py +++ b/nova/conductor/manager.py @@ -41,7 +41,7 @@ datetime_fields = ['launched_at', 'terminated_at'] class ConductorManager(manager.SchedulerDependentManager): """Mission: TBD""" - RPC_API_VERSION = '1.5' + RPC_API_VERSION = '1.6' def __init__(self, *args, **kwargs): super(ConductorManager, self).__init__(service_name='conductor', @@ -100,3 +100,6 @@ class ConductorManager(manager.SchedulerDependentManager): last_refreshed) usage = self.db.bw_usage_get(context, uuid, start_period, mac) return jsonutils.to_primitive(usage) + + def get_backdoor_port(self, context): + return self.backdoor_port diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py index e8a9a2fed..1f38b0ea5 100644 --- a/nova/conductor/rpcapi.py +++ b/nova/conductor/rpcapi.py @@ -32,6 +32,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): 1.3 - Added aggregate_host_add and aggregate_host_delete 1.4 - Added migration_get 1.5 - Added bw_usage_update + 1.6 - Added get_backdoor_port() """ BASE_RPC_API_VERSION = '1.0' @@ -89,3 +90,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): last_ctr_in=last_ctr_in, last_ctr_out=last_ctr_out, last_refreshed=last_refreshed) return self.call(context, msg, version='1.5') + + def get_backdoor_port(self, context): + msg = self.make_msg('get_backdoor_port') + return self.call(context, msg, version='1.6') diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py index 8805ac648..cace21984 100644 --- a/nova/tests/conductor/test_conductor.py +++ b/nova/tests/conductor/test_conductor.py @@ -23,6 +23,7 @@ from nova.conductor import rpcapi as conductor_rpcapi from nova import context from nova import db from nova.db.sqlalchemy import models +from nova import exception as exc from nova import notifications from nova.openstack.common import jsonutils from nova.openstack.common import timeutils @@ -168,6 +169,30 @@ class ConductorTestCase(BaseTestCase): result = self.conductor.bw_usage_update(*update_args) self.assertEqual(result, 'foo') + def test_get_backdoor_port(self): + backdoor_port = 59697 + + def fake_get_backdoor_port(self, context): + return backdoor_port + + if isinstance(self.conductor, conductor_api.API): + self.stubs.Set(conductor_manager.ConductorManager, + 'get_backdoor_port', fake_get_backdoor_port) + port = self.conductor.get_backdoor_port(self.context, 'fake_host') + elif isinstance(self.conductor, conductor_api.LocalAPI): + try: + self.conductor.get_backdoor_port(self.context, 'fake_host') + except exc.InvalidRequest: + port = backdoor_port + else: + if isinstance(self.conductor, conductor_rpcapi.ConductorAPI): + self.stubs.Set(conductor_manager.ConductorManager, + 'get_backdoor_port', fake_get_backdoor_port) + self.conductor.backdoor_port = backdoor_port + port = self.conductor.get_backdoor_port(self.context) + + self.assertEqual(port, backdoor_port) + class ConductorRPCAPITestCase(ConductorTestCase): """Conductor RPC API Tests""" -- cgit