Enable remote debugging for nova
This patch added 2 command line parameters which are used to connect to an external debugger such as pycharm or eclipse. This feature is used when you want to connect to a nova service via a debugger running on a different host. To use it you start the nova service with the following command line parameters --remote_debug-host <where the debugger is running> --remote_debug-port <port> it's listening on>. DocImpact Closes-bug: #1251021 Change-Id: I6ede9bf0813eafbeb91d858c297d4c160aafceba
This commit is contained in:
parent
5f14f9df59
commit
2cbea24209
@ -142,6 +142,20 @@ basis by running::
|
||||
|
||||
$ tools/with_venv.sh <your command>
|
||||
|
||||
Using a remote debugger
|
||||
----------------------
|
||||
|
||||
Some modern IDE such as pycharm (commercial) or Eclipse (open source) support remote debugging. In order to run nova with remote debugging, start the nova process
|
||||
with the following parameters
|
||||
--remote_debug-host <host IP where the debugger is running>
|
||||
--remote_debug-port <port it is listening on>
|
||||
|
||||
Before you start your nova process, start the remote debugger using the instructions for that debugger.
|
||||
For pycharm - http://blog.jetbrains.com/pycharm/2010/12/python-remote-debug-with-pycharm/
|
||||
For Eclipse - http://pydev.org/manual_adv_remote_debugger.html
|
||||
|
||||
More detailed instructions are located here - http://novaremotedebug.blogspot.com
|
||||
|
||||
Contributing Your Work
|
||||
----------------------
|
||||
|
||||
|
@ -2439,6 +2439,27 @@
|
||||
#topics=notifications
|
||||
|
||||
|
||||
[remote_debug]
|
||||
|
||||
#
|
||||
# Options defined in nova.service
|
||||
#
|
||||
|
||||
# Debug host (ip or name) to connect. Note that using the
|
||||
# remote debug option changes how Nova uses the eventlet
|
||||
# library to support async IO. This could result in failures
|
||||
# that do not occur under normal operation. Use at your own
|
||||
# risk. (string value)
|
||||
#host=<None>
|
||||
|
||||
# Debug port to connect. Note that using the remote debug
|
||||
# option changes how Nova uses the eventlet library to support
|
||||
# async IO. This could result in failures that do not occur
|
||||
# under normal operation. Use at your own risk. (integer
|
||||
# value)
|
||||
#port=<None>
|
||||
|
||||
|
||||
[conductor]
|
||||
|
||||
#
|
||||
|
@ -31,4 +31,8 @@ os.environ['EVENTLET_NO_GREENDNS'] = 'yes'
|
||||
|
||||
import eventlet
|
||||
|
||||
eventlet.monkey_patch(os=False)
|
||||
if '--remote_debug-host' in sys.argv and '--remote_debug-port' in sys.argv:
|
||||
# turn off thread patching to enable the remote debugger
|
||||
eventlet.monkey_patch(os=False, thread=False)
|
||||
else:
|
||||
eventlet.monkey_patch(os=False)
|
||||
|
@ -105,9 +105,27 @@ service_opts = [
|
||||
help='maximum time since last check-in for up service'),
|
||||
]
|
||||
|
||||
cli_opts = [
|
||||
cfg.StrOpt('host',
|
||||
help='Debug host (ip or name) to connect. Note '
|
||||
'that using the remote debug option changes how '
|
||||
'Nova uses the eventlet library to support async IO. '
|
||||
'This could result in failures that do not occur '
|
||||
'under normal operation. Use at your own risk.'),
|
||||
|
||||
cfg.IntOpt('port',
|
||||
help='Debug port to connect. Note '
|
||||
'that using the remote debug option changes how '
|
||||
'Nova uses the eventlet library to support async IO. '
|
||||
'This could result in failures that do not occur '
|
||||
'under normal operation. Use at your own risk.')
|
||||
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(service_opts)
|
||||
CONF.import_opt('host', 'nova.netconf')
|
||||
CONF.register_cli_opts(cli_opts, 'remote_debug')
|
||||
|
||||
|
||||
class Service(service.Service):
|
||||
@ -249,6 +267,21 @@ class Service(service.Service):
|
||||
periodic_enable = CONF.periodic_enable
|
||||
if periodic_fuzzy_delay is None:
|
||||
periodic_fuzzy_delay = CONF.periodic_fuzzy_delay
|
||||
if CONF.remote_debug.host and CONF.remote_debug.port:
|
||||
from pydev import pydevd
|
||||
LOG = logging.getLogger('nova')
|
||||
LOG.debug(_('Listening on %(host)s:%(port)s for debug connection'),
|
||||
{'host': CONF.remote_debug.host,
|
||||
'port': CONF.remote_debug.port})
|
||||
pydevd.settrace(host=CONF.remote_debug.host,
|
||||
port=CONF.remote_debug.port,
|
||||
stdoutToServer=False,
|
||||
stderrToServer=False)
|
||||
LOG.warn(_('WARNING: Using the remote debug option changes how '
|
||||
'Nova uses the eventlet library to support async IO. This '
|
||||
'could result in failures that do not occur under normal '
|
||||
'operation. Use at your own risk.'))
|
||||
|
||||
service_obj = cls(host, binary, topic, manager,
|
||||
report_interval=report_interval,
|
||||
periodic_enable=periodic_enable,
|
||||
|
Loading…
Reference in New Issue
Block a user