With the proposed changes in Manila, setting up source-level debugging should be straightforward. This page describes the process for PyCharm; feel free to enhance the content with other IDEs such as Eclipse/PyDev.
A few components are needed:
- Changes to the manila/bin scripts (manila-api, manila-scheduler, manila-share) that start the individual manila services to prevent eventlet.monkey_patch() from patching the thread library if debugging is active. The patching code is called slightly later in the startup sequence to allow the config options to be processed, lest we not know if debugging is active.
- Two new CLI options, pydev-debug-host and pydev-debug-port, to specify debugger connections. These options are consistent with Keystone, though other OS projects differ in their names for these :-/ A third debug option, standard-threads, is available free from Keystone that prevents thread library patching but doesn't initiate a debugger connection.
- Insertion of the debugger connection code in the service Launcher class.
1. Ensure your OpenStack and PyCharm environments have the pydevd library installed. This is distributed as an egg in the top level of the PyCharm installation directory; there are two separate eggs for Python 2.x and 3.x. For Python 2, just run "easy_install pycharm-debug.egg" to install it in your Python path.
2. Create a remote debug configuration in PyCharm (Run-->Edit Configurations...-->Python Remote Debug). If the code on the OpenStack and PyCharm hosts is on different paths (likely), define a path mapping in the remote debug configuration.
3. Invoke the debug configuration (Run-->Debug...-->(config name)). PyCharm will begin listening on the specified port.
4. Start the Manila service to be debugged using the pydev-debug-host switch, where the host is the system running PyCharm. If the default port (58786) isn't suitable, specify a different port using the pydev-debug-port switch.
5. The service will connect to PyCharm, at which point remote debugging is active.
1. If PyCharm is running locally to OpenStack, local debugging is especially convenient. Install the pydevd egg as described above.
2. Create a local config.
3. Invoke the debug configuration, which will start the relevant Manila service and route is console output to PyCharm.