)]}'
{"oslo_messaging/_drivers/base.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"40f0ddaede5c10ed913bebe87b205232771cef86","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        incomings \u003d []"},{"line_number":79,"context_line":"        watch \u003d timeutils.StopWatch(duration\u003dbatch_timeout)"},{"line_number":80,"context_line":"        with watch:"},{"line_number":81,"context_line":"            for __ in range(batch_size):"},{"line_number":82,"context_line":"                msg \u003d self.poll(timeout\u003dwatch.leftover(return_none\u003dTrue))"},{"line_number":83,"context_line":"                if msg is not None:"},{"line_number":84,"context_line":"                    incomings.append(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_b43eaf27","line":81,"updated":"2015-11-30 22:34:45.000000000","message":"I prefer doing the following to get a good range that doesn\u0027t expand the range size into a list.\n\n  from six.moves import range as compat_range\n\nThen use `compat_range` here.","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"098cf9e027e9a32882e5b879c6ba88de8ad80416","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        incomings \u003d []"},{"line_number":79,"context_line":"        watch \u003d timeutils.StopWatch(duration\u003dbatch_timeout)"},{"line_number":80,"context_line":"        with watch:"},{"line_number":81,"context_line":"            for __ in range(batch_size):"},{"line_number":82,"context_line":"                msg \u003d self.poll(timeout\u003dwatch.leftover(return_none\u003dTrue))"},{"line_number":83,"context_line":"                if msg is not None:"},{"line_number":84,"context_line":"                    incomings.append(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_d9d03afa","line":81,"in_reply_to":"9a8ffd7b_b43eaf27","updated":"2015-12-01 09:37:16.000000000","message":"Done","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":8601,"name":"Dmitriy Ukhlov","email":"dukhlov@mirantis.com","username":"dukhlov"},"change_message_id":"ea7b546a4b5d92d4baae02c71f7580efeb64695a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        ending or if the listener have been stopped."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def batch_poll(self, batch_size, batch_timeout):"},{"line_number":73,"context_line":"        \"\"\"Blocking until \u0027size\u0027 messages are pending and return IncomingMessage."},{"line_number":74,"context_line":"        Return None after timeout seconds if timeout is set and no message is"},{"line_number":75,"context_line":"        ending or if the listener have been stopped."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_f5f2d899","line":72,"updated":"2015-12-04 12:33:27.000000000","message":"it looks like to me that \u0027batch_poll(1, batch_timeout)\u0027 and \u0027poll(timeout)\u0027 do the same (read only one message). So why do we need to add batch_poll method? Adding one parameter , like prefetch_count looks like preferable to me","commit_id":"dce1d9415fbf776ffd9b0fa0e42874c1dabf13e8"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5213de220393e1c1539aff7351b34aa9bb070325","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        ending or if the listener have been stopped."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def batch_poll(self, batch_size, batch_timeout):"},{"line_number":73,"context_line":"        \"\"\"Blocking until \u0027size\u0027 messages are pending and return IncomingMessage."},{"line_number":74,"context_line":"        Return None after timeout seconds if timeout is set and no message is"},{"line_number":75,"context_line":"        ending or if the listener have been stopped."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_7967494d","line":72,"in_reply_to":"7a740942_8432fa5d","updated":"2015-12-08 08:15:51.000000000","message":"I have finally changed my mind, and enhance poll instead of adding a new method.","commit_id":"dce1d9415fbf776ffd9b0fa0e42874c1dabf13e8"},{"author":{"_account_id":8601,"name":"Dmitriy Ukhlov","email":"dukhlov@mirantis.com","username":"dukhlov"},"change_message_id":"fcf6c7b11d0aab2aa7d2486b0b21c6c435c238df","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        ending or if the listener have been stopped."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def batch_poll(self, batch_size, batch_timeout):"},{"line_number":73,"context_line":"        \"\"\"Blocking until \u0027size\u0027 messages are pending and return IncomingMessage."},{"line_number":74,"context_line":"        Return None after timeout seconds if timeout is set and no message is"},{"line_number":75,"context_line":"        ending or if the listener have been stopped."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_8432fa5d","line":72,"in_reply_to":"7a740942_894c5871","updated":"2015-12-07 12:39:28.000000000","message":"we can add parameter with default value like prefetch_size \u003d 1 and it will be compatible with old api or leave API as is and add configuration parameter. prefetch size. As far as I understand you introduced new configuration argument for enabling or disabling batch_mode and it is only question how many messages should we read from RabbitMQ of other backed like kafka by single request (I agree that it could be more faster to read a couple of messages at once) . Another point is that you change return Type from single message to list of messages. But in my opinion it is not big difference  - get a list and iterate throw it at rpc endpoint side or iterate prefetched list at driver side. Sure in this case we will dispatch each message to endpoint and have some overhead but I believe that it is not critical.\nI\u0027m ok with new batch_poll method in general, but in case of simple poll message deprecation. Otherwise I am afraid that it becomes more difficult to support them both. Am I wrong?","commit_id":"dce1d9415fbf776ffd9b0fa0e42874c1dabf13e8"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"429323b29e91705e26607d3bfab4fe922e3e192c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        ending or if the listener have been stopped."},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def batch_poll(self, batch_size, batch_timeout):"},{"line_number":73,"context_line":"        \"\"\"Blocking until \u0027size\u0027 messages are pending and return IncomingMessage."},{"line_number":74,"context_line":"        Return None after timeout seconds if timeout is set and no message is"},{"line_number":75,"context_line":"        ending or if the listener have been stopped."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_894c5871","line":72,"in_reply_to":"7a740942_f5f2d899","updated":"2015-12-07 11:18:03.000000000","message":"Because I don\u0027t want to break current driver API.","commit_id":"dce1d9415fbf776ffd9b0fa0e42874c1dabf13e8"}],"oslo_messaging/_executors/impl_pooledexecutor.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"40f0ddaede5c10ed913bebe87b205232771cef86","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @excutils.forever_retry_uncaught_exceptions"},{"line_number":94,"context_line":"    def _runner(self):"},{"line_number":95,"context_line":"        batch_mode \u003d getattr(self.dispatcher, \u0027batch_mode\u0027, False)"},{"line_number":96,"context_line":"        batch_size \u003d getattr(self.dispatcher, \u0027batch_size\u0027, 1) or 1"},{"line_number":97,"context_line":"        batch_timeout \u003d getattr(self.dispatcher, \u0027batch_timeout\u0027, None)"},{"line_number":98,"context_line":"        while not self._tombstone.is_set():"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_cf3ddebc","line":95,"updated":"2015-11-30 22:34:45.000000000","message":"How about instead of doing this just make these class attributes with the defaults being assigned directly with docstrings and telling people what they do instead of this happening here.","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"098cf9e027e9a32882e5b879c6ba88de8ad80416","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @excutils.forever_retry_uncaught_exceptions"},{"line_number":94,"context_line":"    def _runner(self):"},{"line_number":95,"context_line":"        batch_mode \u003d getattr(self.dispatcher, \u0027batch_mode\u0027, False)"},{"line_number":96,"context_line":"        batch_size \u003d getattr(self.dispatcher, \u0027batch_size\u0027, 1) or 1"},{"line_number":97,"context_line":"        batch_timeout \u003d getattr(self.dispatcher, \u0027batch_timeout\u0027, None)"},{"line_number":98,"context_line":"        while not self._tombstone.is_set():"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_b9f8d64a","line":95,"in_reply_to":"9a8ffd7b_cf3ddebc","updated":"2015-12-01 09:37:16.000000000","message":"All dispatchers doesn\u0027t have yet a base class. I have provide a separate patch to improve the situation: https://review.openstack.org/#/c/251736/","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"}],"oslo_messaging/notify/dispatcher.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"40f0ddaede5c10ed913bebe87b205232771cef86","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                else:"},{"line_number":75,"context_line":"                    m.acknowledge()"},{"line_number":76,"context_line":"            except Exception:"},{"line_number":77,"context_line":"                # sys.exc_info() is deleted by LOG.exception()."},{"line_number":78,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":79,"context_line":"                LOG.error(\"Fail to ack/requeue message\", exc_info\u003dexc_info)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_54f2e370","line":77,"updated":"2015-11-30 22:34:45.000000000","message":"Interesting, didn\u0027t know that...\n\nAll I see is:\n\nhttps://hg.python.org/cpython/file/tip/Lib/logging/__init__.py#l1409\n\nWhich looks the same as this code, what deletion code did u find?","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"d42a7ab545fa8978622678e23552363257ac4894","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                else:"},{"line_number":75,"context_line":"                    m.acknowledge()"},{"line_number":76,"context_line":"            except Exception:"},{"line_number":77,"context_line":"                # sys.exc_info() is deleted by LOG.exception()."},{"line_number":78,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":79,"context_line":"                LOG.error(\"Fail to ack/requeue message\", exc_info\u003dexc_info)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_98c9227c","line":77,"in_reply_to":"9a8ffd7b_20034a11","updated":"2015-12-01 18:59:34.000000000","message":"Right, perhaps in this case use the following:\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/excutils.py#L146\n\nSaving it locally here doesn\u0027t seem to do much, because once this method exits the exc_info that was overwritten will exist, not this one... So meh, not sure why this is needed :-P","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"098cf9e027e9a32882e5b879c6ba88de8ad80416","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                else:"},{"line_number":75,"context_line":"                    m.acknowledge()"},{"line_number":76,"context_line":"            except Exception:"},{"line_number":77,"context_line":"                # sys.exc_info() is deleted by LOG.exception()."},{"line_number":78,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":79,"context_line":"                LOG.error(\"Fail to ack/requeue message\", exc_info\u003dexc_info)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_20034a11","line":77,"in_reply_to":"9a8ffd7b_54f2e370","updated":"2015-12-01 09:37:16.000000000","message":"The exception info can be overrided/hidden if another exception is raised by the logging system itself.\n\nIn case of rpc, we reuse the exc_info to send it back to the rpc client. We want to be sure the exception is the application one and not one from the logging system. That why we save it because logging occur.\n\nThe notification doesn\u0027t reuse it, so I have dropped that and just pass exc_info\u003dTrue.","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"40f0ddaede5c10ed913bebe87b205232771cef86","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            raw_messages \u003d list(raw_messages)"},{"line_number":107,"context_line":"            messages \u003d list(messages)"},{"line_number":108,"context_line":"            if priority not in PRIORITIES:"},{"line_number":109,"context_line":"                LOG.warning(\u0027Unknown priority \"%s\"\u0027, priority)"},{"line_number":110,"context_line":"                continue"},{"line_number":111,"context_line":"            for screen, callback in self._callbacks_by_priority.get(priority,"},{"line_number":112,"context_line":"                                                                    []):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_942b6b94","line":109,"updated":"2015-11-30 22:34:45.000000000","message":"Should this throw an exception instead, seems bad to drop a bunch of messages :-/","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"098cf9e027e9a32882e5b879c6ba88de8ad80416","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            raw_messages \u003d list(raw_messages)"},{"line_number":107,"context_line":"            messages \u003d list(messages)"},{"line_number":108,"context_line":"            if priority not in PRIORITIES:"},{"line_number":109,"context_line":"                LOG.warning(\u0027Unknown priority \"%s\"\u0027, priority)"},{"line_number":110,"context_line":"                continue"},{"line_number":111,"context_line":"            for screen, callback in self._callbacks_by_priority.get(priority,"},{"line_number":112,"context_line":"                                                                    []):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_40a3ee9e","line":109,"in_reply_to":"9a8ffd7b_942b6b94","updated":"2015-12-01 09:37:16.000000000","message":"It\u0027s just a seat belt, this cannot occurs if the client is oslo.messaging. Do we support other client ;) ?\n\nAnyways that was already present in previous code.","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"}],"oslo_messaging/notify/listener.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"69c1761865a7ebdab42e078544db318f74253a34","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    :type batch_timeout: int"},{"line_number":181,"context_line":"    :raises: NotImplementedError"},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    transport._require_driver_features(requeue\u003dallow_requeue)"},{"line_number":184,"context_line":"    dispatcher \u003d notify_dispatcher.BatchNotificationDispatcher("},{"line_number":185,"context_line":"        targets, endpoints, serializer, allow_requeue, pool,"},{"line_number":186,"context_line":"        batch_size, batch_timeout)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_cb54f122","line":183,"updated":"2015-11-30 23:42:20.000000000","message":"Hmmm, any reason this shouldn\u0027t be a public method if u are calling it from here, seems like it just validates supported features?","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a72306560587b2babffb8876cbd1fdb8394a8da4","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    :type batch_timeout: int"},{"line_number":181,"context_line":"    :raises: NotImplementedError"},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    transport._require_driver_features(requeue\u003dallow_requeue)"},{"line_number":184,"context_line":"    dispatcher \u003d notify_dispatcher.BatchNotificationDispatcher("},{"line_number":185,"context_line":"        targets, endpoints, serializer, allow_requeue, pool,"},{"line_number":186,"context_line":"        batch_size, batch_timeout)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_f8870e10","line":183,"in_reply_to":"9a8ffd7b_c0c6fe15","updated":"2015-12-01 19:00:08.000000000","message":"Okie dokie.","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"098cf9e027e9a32882e5b879c6ba88de8ad80416","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    :type batch_timeout: int"},{"line_number":181,"context_line":"    :raises: NotImplementedError"},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    transport._require_driver_features(requeue\u003dallow_requeue)"},{"line_number":184,"context_line":"    dispatcher \u003d notify_dispatcher.BatchNotificationDispatcher("},{"line_number":185,"context_line":"        targets, endpoints, serializer, allow_requeue, pool,"},{"line_number":186,"context_line":"        batch_size, batch_timeout)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_c0c6fe15","line":183,"in_reply_to":"9a8ffd7b_cb54f122","updated":"2015-12-01 09:37:16.000000000","message":"This is not directly related with my change.  But I have provided a separate patch to fix this: https://review.openstack.org/#/c/251737/","commit_id":"019d1d0cb52664943d2dd5ed129619b3682c7c26"}]}
