)]}'
{"oslo_messaging/_drivers/amqp1_driver/controller.py":[{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"baa2a1a3dbb5f9ce65aa58c3b2d4cfaba0d9eae9","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        self.processor \u003d eventloop.Thread(self._container_name, self._node,"},{"line_number":829,"context_line":"                                          self._command, self._pid)"},{"line_number":830,"context_line":"        self.processor.wakeup(lambda: self._do_connect())"},{"line_number":831,"context_line":"        self.processor.defer(self._purge_sender_links, self._sender_link_timeout)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"    def add_task(self, task):"},{"line_number":834,"context_line":"        \"\"\"Add a Task for execution on processor thread.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_b7805b4b","line":831,"updated":"2016-11-29 19:25:06.000000000","message":"probably should move this into the \u0027connection_active\u0027 callback.\n\nIn addition you\u0027ll probably want to cancel it in _handle_connection_loss so it does not fire during connection failover.","commit_id":"94f5a21145701e66f81c5cc28e0897553fdb92f6"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"baa2a1a3dbb5f9ce65aa58c3b2d4cfaba0d9eae9","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"        # note well: since this method destroys the connection, it cannot be"},{"line_number":1124,"context_line":"        # invoked directly from a pyngus callback.  Use processor.defer() to"},{"line_number":1125,"context_line":"        # run this method on the main loop instead."},{"line_number":1126,"context_line":"        unused \u003d []"},{"line_number":1127,"context_line":"        for key, sender in iteritems(self._all_senders):"},{"line_number":1128,"context_line":"            # clean up any unused sender links:"},{"line_number":1129,"context_line":"            if sender.pending_messages \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_179d8f59","line":1126,"updated":"2016-11-29 19:25:06.000000000","message":"This reset logic needs to change - part of it becomes irrelevant with this patch.\n\nAt this point the connection is gone so we probably want to destroy() all senders with pending_messages \u003d\u003d 0 and anything on the purged_senders list.\n\nAny senders with pending_messages remaining should go on the active list (clearing the active list beforehand of course).","commit_id":"94f5a21145701e66f81c5cc28e0897553fdb92f6"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"baa2a1a3dbb5f9ce65aa58c3b2d4cfaba0d9eae9","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"            self._purged_senders.clear()"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"            # determine next set to purge"},{"line_number":1165,"context_line":"            purge \u003d set(self._all_senders.keys()) - set(self._active_senders.keys())"},{"line_number":1166,"context_line":"            for key in purge:"},{"line_number":1167,"context_line":"                sender \u003d self._all_senders[key]"},{"line_number":1168,"context_line":"                if sender.pending_messages \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_14102da8","line":1165,"updated":"2016-11-29 19:25:06.000000000","message":"How about making _active_senders just a set containing the active keys?  No need to keep an extra reference to the sender object.","commit_id":"94f5a21145701e66f81c5cc28e0897553fdb92f6"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"baa2a1a3dbb5f9ce65aa58c3b2d4cfaba0d9eae9","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"                sender \u003d self._all_senders[key]"},{"line_number":1168,"context_line":"                if sender.pending_messages \u003d\u003d 0:"},{"line_number":1169,"context_line":"                    sender.detach()"},{"line_number":1170,"context_line":"                    self._purged_senders[key] \u003d self._all_senders.pop(key)"},{"line_number":1171,"context_line":"            self._active_senders.clear()"},{"line_number":1172,"context_line":"            self.processor.defer(self._purge_sender_links, self._sender_link_timeout)"},{"line_number":1173,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_f481f1c4","line":1170,"updated":"2016-11-29 19:25:06.000000000","message":"Can probably also use a simple list for _purged_senders rather than the overhead of a hash map.","commit_id":"94f5a21145701e66f81c5cc28e0897553fdb92f6"}],"oslo_messaging/_drivers/amqp1_driver/opts.py":[{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"baa2a1a3dbb5f9ce65aa58c3b2d4cfaba0d9eae9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    cfg.IntOpt(\u0027default_sender_link_timeout\u0027,"},{"line_number":132,"context_line":"               default\u003d600,"},{"line_number":133,"context_line":"               min\u003d1,"},{"line_number":134,"context_line":"               help\u003d\u0027The duration to schedule a purge of sender links.\u0027"},{"line_number":135,"context_line":"               \u0027 Detach link after first expiry. Destroy link upon next expiry.\u0027),"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Addressing:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_1e3f6cd7","line":134,"updated":"2016-11-29 19:25:06.000000000","message":"should say \"idle sender links\"","commit_id":"94f5a21145701e66f81c5cc28e0897553fdb92f6"}]}
