From 131b7da40946b12bae59ebcc8f1c3d66d0cb5cff Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Wed, 30 Mar 2011 09:04:29 -0700 Subject: Store socket_info as a dictionary rather than an array --- nova/service.py | 14 +++++++------- nova/tests/integrated/integrated_helpers.py | 2 +- nova/wsgi.py | 7 ++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/nova/service.py b/nova/service.py index e399273a0..1405da605 100644 --- a/nova/service.py +++ b/nova/service.py @@ -248,11 +248,9 @@ class WsgiService(object): def wait(self): self.wsgi_app.wait() - def get_port(self, api): - for i in xrange(len(self.apis)): - if self.apis[i] == api: - return self.wsgi_app.ports[i] - return None + def get_socket_info(self, api_name): + """Returns the (host, port) that an API was started on.""" + return self.wsgi_app.socket_info[api_name] class ApiService(WsgiService): @@ -331,8 +329,10 @@ def _run_wsgi(paste_config_file, apis): logging.debug(_("App Config: %(api)s\n%(config)r") % locals()) logging.info(_("Running %s API"), api) app = wsgi.load_paste_app(paste_config_file, api) - apps.append((app, getattr(FLAGS, "%s_listen_port" % api), - getattr(FLAGS, "%s_listen" % api))) + apps.append((app, + getattr(FLAGS, "%s_listen_port" % api), + getattr(FLAGS, "%s_listen" % api), + api)) if len(apps) == 0: logging.error(_("No known API applications configured in %s."), paste_config_file) diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index 5169dcb2e..14b2e06c6 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -176,7 +176,7 @@ class _IntegratedTestBase(test.TestCase): self.api_service = api_service - host, port = api_service.get_port('osapi') + host, port = api_service.get_socket_info('osapi') self.auth_url = 'http://%s:%s/v1.0' % (host, port) def tearDown(self): diff --git a/nova/wsgi.py b/nova/wsgi.py index 54401f998..2487ada22 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -61,15 +61,16 @@ class Server(object): def __init__(self, threads=1000): self.pool = eventlet.GreenPool(threads) - self.ports = [] + self.socket_info = {} - def start(self, application, port, host='0.0.0.0', backlog=128): + def start(self, application, port, host='0.0.0.0', key=None, backlog=128): """Run a WSGI server with the given application.""" arg0 = sys.argv[0] logging.audit(_("Starting %(arg0)s on %(host)s:%(port)s") % locals()) socket = eventlet.listen((host, port), backlog=backlog) self.pool.spawn_n(self._run, application, socket) - self.ports.append(socket.getsockname()) + if key: + self.socket_info[key] = socket.getsockname() def wait(self): """Wait until all servers have completed running.""" -- cgit