diff --git a/bin/keystone-all b/bin/keystone-all index bcb9f4f9b2..ca7001105d 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 5acb901d67..fadfa8936b 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 f5e2fcf8d6..9d4da38a88 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)