Merge "Make it easier to use the eventlet backdoor locally"

This commit is contained in:
Jenkins 2015-07-06 12:49:08 +00:00 committed by Gerrit Code Review
commit 23f1db18f0
3 changed files with 47 additions and 13 deletions

View File

@ -93,7 +93,7 @@ def _listen(host, start_port, end_port, listen_func):
try_port += 1
def initialize_if_enabled(conf):
def _initialize_if_enabled(conf):
conf.register_opts(_options.eventlet_backdoor_opts)
backdoor_locals = {
'exit': _dont_use_this, # So we don't exit the entire process
@ -127,6 +127,40 @@ def initialize_if_enabled(conf):
_LI('Eventlet backdoor listening on %(port)s for process %(pid)d'),
{'port': port, 'pid': os.getpid()}
)
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
locals=backdoor_locals)
return port
thread = eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
locals=backdoor_locals)
return (port, thread)
def initialize_if_enabled(conf):
port_thread = _initialize_if_enabled(conf)
if not port_thread:
return None
else:
port, _thread = port_thread
return port
def _main():
import eventlet
eventlet.monkey_patch(all=True)
from oslo_config import cfg
logging.basicConfig(level=logging.DEBUG)
conf = cfg.ConfigOpts()
conf.register_cli_opts(_options.eventlet_backdoor_opts)
conf(sys.argv[1:])
port_thread = _initialize_if_enabled(conf)
if not port_thread:
raise RuntimeError("Did not create backdoor at requested port")
else:
_port, thread = port_thread
thread.wait()
if __name__ == '__main__':
# simple CLI for testing
_main()

View File

@ -36,7 +36,7 @@ class BackdoorPortTest(base.ServiceBaseTestCase):
def common_backdoor_port_setup(self):
self.sock = self.mox.CreateMockAnything()
self.mox.StubOutWithMock(eventlet, 'listen')
self.mox.StubOutWithMock(eventlet, 'spawn_n')
self.mox.StubOutWithMock(eventlet, 'spawn')
def test_backdoor_port_inuse(self):
self.config(backdoor_port=2345)
@ -52,8 +52,8 @@ class BackdoorPortTest(base.ServiceBaseTestCase):
self.common_backdoor_port_setup()
eventlet.listen(('localhost', 8800)).AndReturn(self.sock)
self.sock.getsockname().AndReturn(('127.0.0.1', 8800))
eventlet.spawn_n(eventlet.backdoor.backdoor_server, self.sock,
locals=moxstubout.mox.IsA(dict))
eventlet.spawn(eventlet.backdoor.backdoor_server, self.sock,
locals=moxstubout.mox.IsA(dict))
self.mox.ReplayAll()
port = eventlet_backdoor.initialize_if_enabled(self.conf)
self.assertEqual(port, 8800)

View File

@ -287,12 +287,12 @@ class LauncherTest(base.ServiceBaseTestCase):
sock = self.mox.CreateMockAnything()
self.mox.StubOutWithMock(eventlet, 'listen')
self.mox.StubOutWithMock(eventlet, 'spawn_n')
self.mox.StubOutWithMock(eventlet, 'spawn')
eventlet.listen(('localhost', 1234)).AndReturn(sock)
sock.getsockname().AndReturn(('127.0.0.1', 1234))
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
locals=mox.IsA(dict))
eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
locals=mox.IsA(dict))
self.mox.ReplayAll()
@ -315,14 +315,14 @@ class LauncherTest(base.ServiceBaseTestCase):
sock = self.mox.CreateMockAnything()
self.mox.StubOutWithMock(eventlet, 'listen')
self.mox.StubOutWithMock(eventlet, 'spawn_n')
self.mox.StubOutWithMock(eventlet, 'spawn')
eventlet.listen(('localhost', 8800)).AndRaise(
socket.error(errno.EADDRINUSE, ''))
eventlet.listen(('localhost', 8801)).AndReturn(sock)
sock.getsockname().AndReturn(('127.0.0.1', 8801))
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
locals=mox.IsA(dict))
eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
locals=mox.IsA(dict))
self.mox.ReplayAll()