Adding a means to connect back to a pydevd debugger.

That patch allows a developer to remotely run a pydev debugger and have the
keystone-all process connect back to it.  Two command line options are
introduced:
    --pydev-debug-host <host>
    --pydev-debug-port <port>
both of the above options are required to enable this behavior.

This patch only enables this behavior when the service is started with
keystone-all.  In the future parts of this patch can be used to enable
this behavior when running in Apache.

Change-Id: I92f99fa34112336a96e42e8261b7313f23ee994e
This commit is contained in:
John Bresnahan 2012-12-19 07:13:24 -10:00
parent ac2d92ca2e
commit 0f225743e8
3 changed files with 29 additions and 0 deletions

View File

@ -91,6 +91,13 @@ if __name__ == '__main__':
sys.exit(1)
monkeypatch_thread = not CONF.standard_threads
pydev_debug_url = utils.setup_remote_pydev_debug()
if pydev_debug_url:
# in order to work around errors caused by monkey patching we have to
# set the thread to False. An explanation is here:
# http://lists.openstack.org/pipermail/openstack-dev/2012-August/
# 000794.html
monkeypatch_thread = False
eventlet.patcher.monkey_patch(all=False, socket=True, time=True,
thread=monkeypatch_thread)

View File

@ -292,3 +292,22 @@ def hash_signed_token(signed_text):
hash_ = hashlib.md5()
hash_.update(signed_text)
return hash_.hexdigest()
def setup_remote_pydev_debug():
if CONF.pydev_debug_host and CONF.pydev_debug_port:
error_msg = ('Error setting up the debug environment. Verify that the'
' option --debug-url has the format <host>:<port> and '
'that a debugger processes is listening on that port.')
try:
from pydev import pydevd
pydevd.settrace(CONF.pydev_debug_host,
port=CONF.pydev_debug_port,
stdoutToServer=True,
stderrToServer=True)
return True
except:
LOG.exception(_(error_msg))
raise

View File

@ -125,6 +125,9 @@ def register_cli_int(*args, **kw):
register_cli_bool('standard-threads', default=False)
register_cli_str('pydev-debug-host', default=None)
register_cli_int('pydev-debug-port', default=None)
register_str('admin_token', default='ADMIN')
register_str('bind_host', default='0.0.0.0')
register_str('compute_port', default=8774)