From 0f225743e8644416df2f200d710912c40b7acd47 Mon Sep 17 00:00:00 2001 From: John Bresnahan Date: Wed, 19 Dec 2012 07:13:24 -1000 Subject: 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 --pydev-debug-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 --- bin/keystone-all | 7 +++++++ keystone/common/utils.py | 19 +++++++++++++++++++ keystone/config.py | 3 +++ 3 files changed, 29 insertions(+) diff --git a/bin/keystone-all b/bin/keystone-all index bcb9f4f9..ca700110 100755 --- a/bin/keystone-all +++ b/bin/keystone-all @@ -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) diff --git a/keystone/common/utils.py b/keystone/common/utils.py index 5acb901d..fadfa893 100644 --- a/keystone/common/utils.py +++ b/keystone/common/utils.py @@ -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 : 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 diff --git a/keystone/config.py b/keystone/config.py index f5e2fcf8..9d4da38a 100644 --- a/keystone/config.py +++ b/keystone/config.py @@ -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) -- cgit