From 2bdac5cb58523d6d8bb7b871d3d2c4bbe36071e9 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Thu, 8 Nov 2012 14:41:59 -0500 Subject: [PATCH] Add support for backdoor_port to be returned with a rpc call. This adds an rpc call for compute and network that will return the eventlet_backdoor port for the service. Change-Id: I95fdb5ca9bce9f3128300e3b5601fb2b2fc5e82f Signed-off-by: Matthew Treinish --- nova/common/eventlet_backdoor.py | 8 +++++--- nova/manager.py | 1 + nova/service.py | 11 ++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/nova/common/eventlet_backdoor.py b/nova/common/eventlet_backdoor.py index 4620d76ac..b407171c4 100644 --- a/nova/common/eventlet_backdoor.py +++ b/nova/common/eventlet_backdoor.py @@ -64,7 +64,7 @@ backdoor_locals = { def initialize_if_enabled(): if CONF.backdoor_port is None: - return + return None # NOTE(johannes): The standard sys.displayhook will print the value of # the last expression and set it to __builtin__._, which overwrites @@ -76,6 +76,8 @@ def initialize_if_enabled(): pprint.pprint(val) sys.displayhook = displayhook - eventlet.spawn(eventlet.backdoor.backdoor_server, - eventlet.listen(('localhost', CONF.backdoor_port)), + sock = eventlet.listen(('localhost', CONF.backdoor_port)) + port = sock.getsockname()[1] + eventlet.spawn(eventlet.backdoor.backdoor_server, sock, locals=backdoor_locals) + return port diff --git a/nova/manager.py b/nova/manager.py index 2aff3d04e..100e0757c 100644 --- a/nova/manager.py +++ b/nova/manager.py @@ -140,6 +140,7 @@ class Manager(base.Base): host = CONF.host self.host = host self.load_plugins() + self.backdoor_port = None super(Manager, self).__init__(db_driver) def load_plugins(self): diff --git a/nova/service.py b/nova/service.py index 45bdf7ec0..15d1ca887 100644 --- a/nova/service.py +++ b/nova/service.py @@ -111,7 +111,7 @@ class Launcher(object): """ self._services = [] - eventlet_backdoor.initialize_if_enabled() + self.backdoor_port = eventlet_backdoor.initialize_if_enabled() @staticmethod def run_server(server): @@ -131,6 +131,8 @@ class Launcher(object): :returns: None """ + if self.backdoor_port is not None: + server.backdoor_port = self.backdoor_port gt = eventlet.spawn(self.run_server, server) self._services.append(gt) @@ -382,6 +384,7 @@ class Service(object): self.periodic_fuzzy_delay = periodic_fuzzy_delay self.saved_args, self.saved_kwargs = args, kwargs self.timers = [] + self.backdoor_port = None def start(self): vcs_string = version.version_string_with_vcs() @@ -400,6 +403,9 @@ class Service(object): self.manager.pre_start_hook() + if self.backdoor_port is not None: + self.manager.backdoor_port = self.backdoor_port + self.conn = rpc.create_connection(new=True) LOG.debug(_("Creating Consumer connection for Service %s") % self.topic) @@ -578,6 +584,7 @@ class WSGIService(object): port=self.port) # Pull back actual port used self.port = self.server.port + self.backdoor_port = None def _get_manager(self): """Initialize a Manager object appropriate for this service. @@ -612,6 +619,8 @@ class WSGIService(object): if self.manager: self.manager.init_host() self.manager.pre_start_hook() + if self.backdoor_port is not None: + self.manager.backdoor_port = self.backdoor_port self.server.start() if self.manager: self.manager.post_start_hook()