)]}'
{"ceilometermiddleware/swift.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"013603ef70ba68437e4039a3a984a07683a3d5c6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"import threading"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"import eventlet"},{"line_number":68,"context_line":"eventlet.monkey_patch()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"_LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_85bb820e","line":68,"updated":"2016-09-13 07:11:43.000000000","message":"If other component of the wsgi pipeline will be patched too ? If yes this is going to be problematic. And I think the answer is yes, but I haven\u0027t checked.\n\nPerhaps we should set the same monkey patching as swift done to at least limit the scope on thing that can break.\n\nhttps://github.com/openstack/swift/blob/master/swift/common/wsgi.py#L419\n\nThis is clearly not perfect, but swift monkey patching doesn\u0027t follow eventlet recommandation and patch the application at runtime instead of load time so... We can\u0027t do better...","commit_id":"ebdfe000ee9191ef8d9ae98cce191d2f596fc140"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"730ab1a2ffa8ab6edaf03da1a399ce9b5e4aa361","unresolved":false,"context_lines":[{"line_number":65,"context_line":"import threading"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"import eventlet"},{"line_number":68,"context_line":"eventlet.monkey_patch()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"_LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_3993315d","line":68,"in_reply_to":"7a8ec9b2_8cca5a4e","updated":"2016-09-14 13:22:51.000000000","message":"horrible what a pretty good description of monkey patching :p\n\nYes I think is safer to use the same line.","commit_id":"ebdfe000ee9191ef8d9ae98cce191d2f596fc140"},{"author":{"_account_id":14768,"name":"Darren Hague","email":"d.hague@sap.com","username":"dhague"},"change_message_id":"41afc731d404013a3f28199b6852006bfc45596e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"import threading"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"import eventlet"},{"line_number":68,"context_line":"eventlet.monkey_patch()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"_LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_8cca5a4e","line":68,"in_reply_to":"9a89bdaa_85bb820e","updated":"2016-09-14 07:23:56.000000000","message":"Ugh, monkey patching is horrible :-(\nIn general it is safe to monkey patch several times (http://eventlet.net/doc/basic_usage.html#patching-functions) but I see in the link you quote that we only patch certain elements instead of All.\nWhat about if I copy that code here, i.e. use\neventlet.patcher.monkey_patch(all\u003dFalse, socket\u003dTrue, select\u003dTrue, thread\u003dTrue) - would that be OK with you?","commit_id":"ebdfe000ee9191ef8d9ae98cce191d2f596fc140"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e8639cf351055c2092efdd464ba63b9c305bfcdb","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                _LOG.debug(\u0027ProcessQueue: Got event %s from queue - trigger \u0027"},{"line_number":339,"context_line":"                           \u0027send\u0027, event.id)"},{"line_number":340,"context_line":"                done_sending \u003d Swift.event_sender.trigger_send(event)"},{"line_number":341,"context_line":"                while done_sending.wait(self.timeout) is False \\"},{"line_number":342,"context_line":"                        and Swift.event_sender.event_to_send is not None:"},{"line_number":343,"context_line":"                    _LOG.warning(\u0027ProcessQueue: Timeout sending event %s - \u0027"},{"line_number":344,"context_line":"                                 \u0027retry in new thread.\u0027, event.id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8ec9b2_9f004c68","line":341,"updated":"2016-09-21 16:16:31.000000000","message":"you should wrap split in parantheses rather than \\","commit_id":"6674aacaa99ea3dc5c7ffd4822e82283f42b6f46"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e8639cf351055c2092efdd464ba63b9c305bfcdb","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            except BaseException as e:"},{"line_number":351,"context_line":"                _LOG.error(\"ProcessQueue: Exception in sending thread: %s\","},{"line_number":352,"context_line":"                           e.message)"},{"line_number":353,"context_line":"                _LOG.exception(\"ProcessQueue: SendEventThread loop exception\")"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"class SendEventThread(threading.Thread):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8ec9b2_32abdf76","line":353,"updated":"2016-09-21 16:16:31.000000000","message":"i feel like you don\u0027t need both. exception and error both log to same level except exception will include stacktrace.","commit_id":"6674aacaa99ea3dc5c7ffd4822e82283f42b6f46"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e8639cf351055c2092efdd464ba63b9c305bfcdb","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                _LOG.debug(\u0027SendEvent: Send event %s\u0027, self.event_to_send.id)"},{"line_number":387,"context_line":"                self.swift.send_notification(self.notifier, self.event_to_send)"},{"line_number":388,"context_line":"                self.event_to_send \u003d None"},{"line_number":389,"context_line":"                if self.alive:"},{"line_number":390,"context_line":"                    _LOG.debug("},{"line_number":391,"context_line":"                        \u0027SendEvent: Reset send trigger thread events\u0027)"},{"line_number":392,"context_line":"                    self.done_sending.set()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a8ec9b2_52722b12","line":389,"range":{"start_line":389,"start_character":16,"end_line":389,"end_character":30},"updated":"2016-09-21 16:16:31.000000000","message":"just curious, why do we need this condition?","commit_id":"6674aacaa99ea3dc5c7ffd4822e82283f42b6f46"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"09c08015b7526f2eb739bdfaf3392d0b17cd40b6","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        \"\"\"Send events without blocking swift proxy.\"\"\""},{"line_number":336,"context_line":"        log \u003d multiprocessing.log_to_stderr()"},{"line_number":337,"context_line":"        log.setLevel(log_level)"},{"line_number":338,"context_line":"        event_buffer \u003d self.start_sender_process(self._notifier)"},{"line_number":339,"context_line":"        while True:"},{"line_number":340,"context_line":"            try:"},{"line_number":341,"context_line":"                log.debug(\u0027Wait for event from send queue\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_92928056","line":338,"range":{"start_line":338,"start_character":49,"end_line":338,"end_character":63},"updated":"2016-11-07 15:23:31.000000000","message":"i\u0027m pretty sure they\u0027re the same, but why do we use object _notifier here and in line 354 we use the param notifier when recreating start_sender_process.","commit_id":"202f0272030b58090fda022cd11a0f621e8dd66b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"09c08015b7526f2eb739bdfaf3392d0b17cd40b6","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                        processLock.release()"},{"line_number":356,"context_line":"                        self.trigger_send(event, event_buffer,"},{"line_number":357,"context_line":"                                          done_sending, log)"},{"line_number":358,"context_line":"                else:"},{"line_number":359,"context_line":"                    event_buffer.put(None)"},{"line_number":360,"context_line":"                    break"},{"line_number":361,"context_line":"            except BaseException:"},{"line_number":362,"context_line":"                LOG.error(\"Exception in sending thread\","},{"line_number":363,"context_line":"                          exc_info\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_4f404357","line":360,"range":{"start_line":358,"start_character":0,"end_line":360,"end_character":24},"updated":"2016-11-07 15:23:31.000000000","message":"it seems like this is never valid? event_queue.get() will block until it gets something.","commit_id":"202f0272030b58090fda022cd11a0f621e8dd66b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"09c08015b7526f2eb739bdfaf3392d0b17cd40b6","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        buffer.put(event)"},{"line_number":370,"context_line":"        done_sending.clear()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    def event_sender_die(self, event_buffer, done_sending):"},{"line_number":373,"context_line":"        event_buffer.put(None)"},{"line_number":374,"context_line":"        done_sending.set()"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def sendEventThread(self, notifier, buffer, done_sending, log_level):"},{"line_number":377,"context_line":"        log \u003d multiprocessing.get_logger()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_72896cca","line":374,"range":{"start_line":372,"start_character":0,"end_line":374,"end_character":26},"updated":"2016-11-07 15:23:31.000000000","message":"just curious, but whats\u0027 this for?","commit_id":"202f0272030b58090fda022cd11a0f621e8dd66b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"09c08015b7526f2eb739bdfaf3392d0b17cd40b6","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                log.debug("},{"line_number":386,"context_line":"                    \u0027done_sending.set()\u0027)"},{"line_number":387,"context_line":"                done_sending.set()"},{"line_number":388,"context_line":"            else:"},{"line_number":389,"context_line":"                break"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"def filter_factory(global_conf, **local_conf):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_525f0872","line":389,"range":{"start_line":388,"start_character":0,"end_line":389,"end_character":21},"updated":"2016-11-07 15:23:31.000000000","message":"same","commit_id":"202f0272030b58090fda022cd11a0f621e8dd66b"}],"ceilometermiddleware/tests/test_swift.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"09c08015b7526f2eb739bdfaf3392d0b17cd40b6","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ceilometermiddleware import swift"},{"line_number":20,"context_line":"from ceilometermiddleware.tests import base as tests_base"},{"line_number":21,"context_line":"import multiprocessing"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_65744dcf","line":21,"updated":"2016-11-07 15:23:31.000000000","message":"native modules should be grouped above 3rd party and local modules.","commit_id":"202f0272030b58090fda022cd11a0f621e8dd66b"}]}
