)]}'
{"nova/tests/unit/virt/hyperv/test_serialproxy.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"81a0391f99d900cf0485f4c42f7c54b4d02189eb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova import exception"},{"line_number":20,"context_line":"from nova.tests.unit.virt.hyperv import test_base"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_93d7c9be","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":13},"updated":"2015-12-17 19:53:24.000000000","message":"This is a stdlib import and should be in the first import section by itself. mock is third-party and goes in the second section [1]\n\n[1] http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"9ef567b1d3264de3c62740d82df934e03630da02"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2ea46a0407eb18c13fd548c16960238b45b398bf","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from nova import exception"},{"line_number":20,"context_line":"from nova.tests.unit.virt.hyperv import test_base"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_ba9b9871","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":13},"in_reply_to":"3a7e1126_93d7c9be","updated":"2015-12-18 11:08:31.000000000","message":"Done","commit_id":"9ef567b1d3264de3c62740d82df934e03630da02"}],"nova/virt/hyperv/serialproxy.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2ae97653b65dae313325521477f0194db4d37d7d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.i18n import _"},{"line_number":23,"context_line":"from nova.virt.hyperv import constants"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"threading \u003d patcher.original(\u0027threading\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def handle_socket_errors(func):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_f512bf61","line":25,"updated":"2015-12-17 17:26:50.000000000","message":"Its maybe worth describing this choice here?","commit_id":"9ef567b1d3264de3c62740d82df934e03630da02"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2ea46a0407eb18c13fd548c16960238b45b398bf","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.i18n import _"},{"line_number":23,"context_line":"from nova.virt.hyperv import constants"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"threading \u003d patcher.original(\u0027threading\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def handle_socket_errors(func):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_ba1638ef","line":25,"in_reply_to":"3a7e1126_f3796dfd","updated":"2015-12-18 11:08:31.000000000","message":"Sure, I\u0027ll add an inline comment. Basically, we had to use \u0027real\u0027 threads for the named pipe consumers. The reason is that eventlet greenpipes are not available on Windows, and using the Windows API functions were blocking the whole thread, not just the calling green thread. Also, even though those are consumed in a sort of asynchronous way, when using greenthreads, the callbacks were not actually called.\n\nTo sum up, because this worker has to communicate with the named pipe consumers via queues, this had to run in a \u0027native\u0027 thread as well.","commit_id":"9ef567b1d3264de3c62740d82df934e03630da02"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"81a0391f99d900cf0485f4c42f7c54b4d02189eb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.i18n import _"},{"line_number":23,"context_line":"from nova.virt.hyperv import constants"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"threading \u003d patcher.original(\u0027threading\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def handle_socket_errors(func):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a7e1126_f3796dfd","line":25,"in_reply_to":"3a7e1126_f512bf61","updated":"2015-12-17 19:53:24.000000000","message":"+1 I think that would be helpful","commit_id":"9ef567b1d3264de3c62740d82df934e03630da02"}]}
