)]}'
{"oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_direct.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                self._get_fanout_connection(request.target, socket)"},{"line_number":87,"context_line":"            return socket"},{"line_number":88,"context_line":"        except retrying.RetryError:"},{"line_number":89,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":90,"context_line":"            socket.close()"},{"line_number":91,"context_line":"            self._raise_timeout(request)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_2ecd5731","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":16},"updated":"2016-09-21 12:11:10.000000000","message":"We don\u0027t have to unregister a socket, since it is not registered yet. The socket is registered in _recv_reply, which is only used inside send_call.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                self._get_fanout_connection(request.target, socket)"},{"line_number":87,"context_line":"            return socket"},{"line_number":88,"context_line":"        except retrying.RetryError:"},{"line_number":89,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":90,"context_line":"            socket.close()"},{"line_number":91,"context_line":"            self._raise_timeout(request)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_a8d8e0f0","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":16},"in_reply_to":"7a8ec9b2_2ecd5731","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        except retrying.RetryError:"},{"line_number":89,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":90,"context_line":"            socket.close()"},{"line_number":91,"context_line":"            self._raise_timeout(request)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _finally_unregister(self, request, socket):"},{"line_number":94,"context_line":"        super(DealerPublisherDirect, self)._finally_unregister(request, socket)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_4e9c630e","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":16},"updated":"2016-09-21 12:11:10.000000000","message":"_raise_timeout must also be used only inside send_call. If there are no hosts, cast and fanout drop messages silently.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        except retrying.RetryError:"},{"line_number":89,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":90,"context_line":"            socket.close()"},{"line_number":91,"context_line":"            self._raise_timeout(request)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _finally_unregister(self, request, socket):"},{"line_number":94,"context_line":"        super(DealerPublisherDirect, self)._finally_unregister(request, socket)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_68d6d8c6","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":16},"in_reply_to":"7a8ec9b2_4e9c630e","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.receiver.unregister_socket(socket)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _send_request(self, request):"},{"line_number":98,"context_line":"        with contextlib.closing(self._connect_socket(request)) as socket:"},{"line_number":99,"context_line":"            if request.msg_type in zmq_names.MULTISEND_TYPES:"},{"line_number":100,"context_line":"                for _ in range(socket.connections_count()):"},{"line_number":101,"context_line":"                    self.sender.send(socket, request)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_91cf6e7e","line":98,"range":{"start_line":98,"start_character":32,"end_line":98,"end_character":36},"updated":"2016-09-21 12:11:10.000000000","message":"_connect_socket may return None, then this line will fail. I suggest to add a check in the beginning here, e.g.:\n\nsocket \u003d self._connect_socket(request)\nif not socket:\n    return\n# ...","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def send_call(self, request):"},{"line_number":106,"context_line":"        self._check_message_pattern(zmq_names.CALL_TYPE, request.msg_type)"},{"line_number":107,"context_line":"        with contextlib.closing(self._connect_socket(request)) as socket:"},{"line_number":108,"context_line":"            self.sender.send(socket, request)"},{"line_number":109,"context_line":"            reply \u003d self._recv_reply(request, socket)"},{"line_number":110,"context_line":"            self.receiver.unregister_socket(socket)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_91404ea7","line":107,"range":{"start_line":107,"start_character":37,"end_line":107,"end_character":52},"updated":"2016-09-21 12:11:10.000000000","message":"The same as above, only _raise_timeout must be called here if _connect_socket returns None.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        with contextlib.closing(self._connect_socket(request)) as socket:"},{"line_number":108,"context_line":"            self.sender.send(socket, request)"},{"line_number":109,"context_line":"            reply \u003d self._recv_reply(request, socket)"},{"line_number":110,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":111,"context_line":"            return reply"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_f1a4324c","line":110,"range":{"start_line":110,"start_character":12,"end_line":110,"end_character":16},"updated":"2016-09-21 12:11:10.000000000","message":"This line is not needed, since overriden _finally_unregister will do all necessary work in _recv_reply.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        with contextlib.closing(self._connect_socket(request)) as socket:"},{"line_number":108,"context_line":"            self.sender.send(socket, request)"},{"line_number":109,"context_line":"            reply \u003d self._recv_reply(request, socket)"},{"line_number":110,"context_line":"            self.receiver.unregister_socket(socket)"},{"line_number":111,"context_line":"            return reply"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_483bdceb","line":110,"range":{"start_line":110,"start_character":12,"end_line":110,"end_character":16},"in_reply_to":"7a8ec9b2_f1a4324c","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"}],"oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_proxy.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                           \"msg_id\": request.message_id})"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def cleanup(self):"},{"line_number":90,"context_line":"        super(DealerPublisherProxy, self).cleanup()"},{"line_number":91,"context_line":"        self.connection_updater.stop()"},{"line_number":92,"context_line":"        self.socket.close()"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_f55257dd","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":13},"updated":"2016-09-21 12:11:10.000000000","message":"I guess self.routing_table.cleanup() is missing here.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                           \"msg_id\": request.message_id})"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def cleanup(self):"},{"line_number":90,"context_line":"        super(DealerPublisherProxy, self).cleanup()"},{"line_number":91,"context_line":"        self.connection_updater.stop()"},{"line_number":92,"context_line":"        self.socket.close()"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_c84e0cc1","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":13},"in_reply_to":"7a8ec9b2_f55257dd","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"1ca4992c8e90c72c3d48477c37156545ea2f1343","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        return self.socket"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def send_request(self, socket, request):"},{"line_number":81,"context_line":"        try:"},{"line_number":82,"context_line":"            for routing_key in self._get_routing_keys(request):"},{"line_number":83,"context_line":"                request.routing_key \u003d routing_key"},{"line_number":84,"context_line":"                self.sender.send(socket, request)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_d9bf29a8","line":81,"range":{"start_line":81,"start_character":8,"end_line":81,"end_character":11},"updated":"2016-09-26 16:43:40.000000000","message":"With this try-except block we can\u0027t figure out whether a request was sent successfully or not. I suggest moving exception handling completely to publisher managers.","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"4bd74f2ad9c6fca55ee4b325e81a8a34d90355a5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        return self.socket"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def send_request(self, socket, request):"},{"line_number":81,"context_line":"        try:"},{"line_number":82,"context_line":"            for routing_key in self._get_routing_keys(request):"},{"line_number":83,"context_line":"                request.routing_key \u003d routing_key"},{"line_number":84,"context_line":"                self.sender.send(socket, request)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_5e5aedf2","line":81,"range":{"start_line":81,"start_character":8,"end_line":81,"end_character":11},"in_reply_to":"5a8bc5a2_d9bf29a8","updated":"2016-09-27 11:12:31.000000000","message":"Done","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"}],"oslo_messaging/_drivers/zmq_driver/client/publishers/zmq_publisher_base.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1696e9c840ba61b716f2eaeb238db9a6f8e9f90","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def send_request(self, socket, request):"},{"line_number":69,"context_line":"        \"\"\"Publish request on a socket"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":72,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":73,"context_line":"        :param request: request object"},{"line_number":74,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_e85091d6","line":71,"range":{"start_line":71,"start_character":40,"end_line":71,"end_character":49},"updated":"2016-09-26 16:42:50.000000000","message":"publish","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"e465d706a37f77532cc1e2893535ddc076f64f38","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def send_request(self, socket, request):"},{"line_number":69,"context_line":"        \"\"\"Publish request on a socket"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":72,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":73,"context_line":"        :param request: request object"},{"line_number":74,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_e1196323","line":71,"range":{"start_line":71,"start_character":40,"end_line":71,"end_character":49},"in_reply_to":"5a8bc5a2_e85091d6","updated":"2016-09-27 09:31:33.000000000","message":"Done","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1696e9c840ba61b716f2eaeb238db9a6f8e9f90","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def receive_reply(self, socket, request):"},{"line_number":79,"context_line":"        \"\"\"Wait for a reply via the socket used for sending the request."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":82,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":83,"context_line":"        :param request: request object"},{"line_number":84,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_a81f6906","line":81,"range":{"start_line":81,"start_character":40,"end_line":81,"end_character":49},"updated":"2016-09-26 16:42:50.000000000","message":"receive","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1696e9c840ba61b716f2eaeb238db9a6f8e9f90","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def receive_reply(self, socket, request):"},{"line_number":79,"context_line":"        \"\"\"Wait for a reply via the socket used for sending the request."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":82,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":83,"context_line":"        :param request: request object"},{"line_number":84,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_28da794c","line":81,"range":{"start_line":81,"start_character":50,"end_line":81,"end_character":57},"updated":"2016-09-26 16:42:50.000000000","message":"reply","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"e465d706a37f77532cc1e2893535ddc076f64f38","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def receive_reply(self, socket, request):"},{"line_number":79,"context_line":"        \"\"\"Wait for a reply via the socket used for sending the request."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":82,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":83,"context_line":"        :param request: request object"},{"line_number":84,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_21d6eb27","line":81,"range":{"start_line":81,"start_character":50,"end_line":81,"end_character":57},"in_reply_to":"5a8bc5a2_28da794c","updated":"2016-09-27 09:31:33.000000000","message":"Done","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"e465d706a37f77532cc1e2893535ddc076f64f38","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def receive_reply(self, socket, request):"},{"line_number":79,"context_line":"        \"\"\"Wait for a reply via the socket used for sending the request."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        :param socket: socket object to publisher request on"},{"line_number":82,"context_line":"        :type socket: zmq_socket.ZmqSocket"},{"line_number":83,"context_line":"        :param request: request object"},{"line_number":84,"context_line":"        :type senders: zmq_request.Request"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a8bc5a2_81dfbf38","line":81,"range":{"start_line":81,"start_character":40,"end_line":81,"end_character":49},"in_reply_to":"5a8bc5a2_a81f6906","updated":"2016-09-27 09:31:33.000000000","message":"Done","commit_id":"a69e6c40386bd7b3c61626d526aabd4bbbed15f2"}],"oslo_messaging/_drivers/zmq_driver/client/zmq_ack_manager.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"2bfa473323c52f8cb64cec2ad724f5327116bccd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def _send_request(self, request):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":100,"context_line":"            if not ack_future:"},{"line_number":101,"context_line":"                return"},{"line_number":102,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":103,"context_line":"        except retrying.RetryError:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_2d8f7424","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":14},"updated":"2016-09-22 17:12:44.000000000","message":"This check is not needed anymore, since ack_future can\u0027t be None in this implementation.","commit_id":"364d5ae66b77f8a2c838e68106e646ba2c47b534"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"2bfa473323c52f8cb64cec2ad724f5327116bccd","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        super(AckManager, self).cleanup()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    send_cast \u003d _send_request"},{"line_number":112,"context_line":"    send_fanout \u003d _send_request"},{"line_number":113,"context_line":"    send_notify \u003d _send_request"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_ed774c00","line":112,"range":{"start_line":112,"start_character":4,"end_line":112,"end_character":15},"updated":"2016-09-22 17:12:44.000000000","message":"We don\u0027t have acks for fanout and notify, so ack_future will wait for a long time until it exhausts all retry attempts (by default 15 + 30 + 60 + 120 seconds).","commit_id":"364d5ae66b77f8a2c838e68106e646ba2c47b534"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"1ca4992c8e90c72c3d48477c37156545ea2f1343","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def send_cast(self, request):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":100,"context_line":"            if not ack_future:"},{"line_number":101,"context_line":"                return"},{"line_number":102,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":103,"context_line":"        except retrying.RetryError:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_595b19f6","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":14},"updated":"2016-09-26 16:43:40.000000000","message":"ack_future can\u0027t be None in this implementation.","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"6e357d969ac904496dadcb3647f8b1f308887c6b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def send_cast(self, request):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":100,"context_line":"            if not ack_future:"},{"line_number":101,"context_line":"                return"},{"line_number":102,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":103,"context_line":"        except retrying.RetryError:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_21926b4c","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":14},"in_reply_to":"5a8bc5a2_595b19f6","updated":"2016-09-27 09:31:40.000000000","message":"Done","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"93bd2859efa5de3e521280916b5852d1266b756e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":89,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":90,"context_line":"            return self.publisher.receive_reply(ack_future.socket, request)"},{"line_number":91,"context_line":"        except retrying.RetryError:"},{"line_number":92,"context_line":"            self._raise_timeout(request)"},{"line_number":93,"context_line":"        finally:"},{"line_number":94,"context_line":"            if not ack_future.done():"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_d1d8a255","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":14},"updated":"2016-09-27 15:10:37.000000000","message":"I suggest removing this except block and decorating send_call with target_not_found_timeout (for uniformity). Also I see an additional problem here. If _schedule_request_for_ack raises an exception, an ack_future variable won\u0027t be created, so there will be a new exception in finally part (NameError). So I think that the line 88 (and also 89, since it is safe; see the old code) should be moved from try-finally block, then any possible inside _schedule_request_for_ack error will be handled by target_not_found_timeout decorator.","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"1dae435b8582b2293d5720aecc4b5bdcc2f30a4c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":89,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":90,"context_line":"            return self.publisher.receive_reply(ack_future.socket, request)"},{"line_number":91,"context_line":"        except retrying.RetryError:"},{"line_number":92,"context_line":"            self._raise_timeout(request)"},{"line_number":93,"context_line":"        finally:"},{"line_number":94,"context_line":"            if not ack_future.done():"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_27f95a4e","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":14},"in_reply_to":"5a8bc5a2_d1d8a255","updated":"2016-09-28 09:21:05.000000000","message":"Done","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"93bd2859efa5de3e521280916b5852d1266b756e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":100,"context_line":"        self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _send_request(self, request):"},{"line_number":103,"context_line":"        socket \u003d self.publisher.acquire_connection(request)"},{"line_number":104,"context_line":"        self.publisher.send_request(socket, request)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_06856ecd","line":102,"range":{"start_line":102,"start_character":4,"end_line":102,"end_character":7},"updated":"2016-09-27 15:10:37.000000000","message":"This method also should be decorated with target_not_found_warn.","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"1dae435b8582b2293d5720aecc4b5bdcc2f30a4c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":100,"context_line":"        self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _send_request(self, request):"},{"line_number":103,"context_line":"        socket \u003d self.publisher.acquire_connection(request)"},{"line_number":104,"context_line":"        self.publisher.send_request(socket, request)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_a7a3aa4e","line":102,"range":{"start_line":102,"start_character":4,"end_line":102,"end_character":7},"in_reply_to":"5a8bc5a2_06856ecd","updated":"2016-09-28 09:21:05.000000000","message":"Done","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"6b1cc3e5adbc6f8bf77e347014920e47d80cb2d2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @zmq_publisher_manager.target_not_found_timeout"},{"line_number":86,"context_line":"    def send_call(self, request):"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            ack_future \u003d self._schedule_request_for_ack(request)"},{"line_number":89,"context_line":"            self._pool.submit(self._wait_for_ack, ack_future)"},{"line_number":90,"context_line":"            return self.publisher.receive_reply(ack_future.socket, request)"},{"line_number":91,"context_line":"        finally:"},{"line_number":92,"context_line":"            if not ack_future.done():"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a98d1f4_c3628516","line":89,"range":{"start_line":88,"start_character":12,"end_line":89,"end_character":61},"updated":"2016-09-28 14:39:08.000000000","message":"These two lines have to be moved from the try-finally block, since if _schedule_request_for_ack raises an exception (RetryingError), then ack_future won\u0027t be created and in finally block we will have another exception (NameError since ack_future variable is not defined), which won\u0027t be handled.","commit_id":"32dd8d9779367ec5c8d0a6f58a06b4d85e0a9e6e"}],"oslo_messaging/_drivers/zmq_driver/client/zmq_publisher_manager.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"2bfa473323c52f8cb64cec2ad724f5327116bccd","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    self.publisher.acquire_connection(request)) as socket:"},{"line_number":112,"context_line":"                self.publisher.send_request(socket, request)"},{"line_number":113,"context_line":"                reply \u003d self.publisher.receive_reply(socket, request)"},{"line_number":114,"context_line":"                self.receiver.unregister_socket(socket)"},{"line_number":115,"context_line":"                return reply"},{"line_number":116,"context_line":"        except retrying.RetryError:"},{"line_number":117,"context_line":"            self.publisher._raise_timeout(request)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a8bc5a2_8d49688e","line":114,"range":{"start_line":114,"start_character":16,"end_line":114,"end_character":20},"updated":"2016-09-22 17:12:44.000000000","message":"I think that this line is redundant, since socket will be unregistered in receive_reply.","commit_id":"364d5ae66b77f8a2c838e68106e646ba2c47b534"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"1ca4992c8e90c72c3d48477c37156545ea2f1343","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    self.publisher.acquire_connection(request)) as socket:"},{"line_number":112,"context_line":"                self.publisher.send_request(socket, request)"},{"line_number":113,"context_line":"                reply \u003d self.publisher.receive_reply(socket, request)"},{"line_number":114,"context_line":"                self.receiver.unregister_socket(socket)"},{"line_number":115,"context_line":"                return reply"},{"line_number":116,"context_line":"        except retrying.RetryError:"},{"line_number":117,"context_line":"            self.publisher._raise_timeout(request)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_39248d5e","line":114,"range":{"start_line":114,"start_character":16,"end_line":114,"end_character":20},"updated":"2016-09-26 16:43:40.000000000","message":"This line is redundant. The socket was already unregistered in receive_reply.","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"6e357d969ac904496dadcb3647f8b1f308887c6b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    self.publisher.acquire_connection(request)) as socket:"},{"line_number":112,"context_line":"                self.publisher.send_request(socket, request)"},{"line_number":113,"context_line":"                reply \u003d self.publisher.receive_reply(socket, request)"},{"line_number":114,"context_line":"                self.receiver.unregister_socket(socket)"},{"line_number":115,"context_line":"                return reply"},{"line_number":116,"context_line":"        except retrying.RetryError:"},{"line_number":117,"context_line":"            self.publisher._raise_timeout(request)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a8bc5a2_61af137d","line":114,"range":{"start_line":114,"start_character":16,"end_line":114,"end_character":20},"in_reply_to":"5a8bc5a2_39248d5e","updated":"2016-09-27 09:31:40.000000000","message":"Done","commit_id":"31e51d9639ffbbb34a510e669062b3591c1066b1"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"93bd2859efa5de3e521280916b5852d1266b756e","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @target_not_found_timeout"},{"line_number":132,"context_line":"    def send_call(self, request):"},{"line_number":133,"context_line":"        self._check_message_pattern(zmq_names.CALL_TYPE, request.msg_type)"},{"line_number":134,"context_line":"        with contextlib.closing("},{"line_number":135,"context_line":"                self.publisher.acquire_connection(request)) as socket:"},{"line_number":136,"context_line":"            self.publisher.send_request(socket, request)"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_d1c182e5","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":12},"updated":"2016-09-27 15:10:37.000000000","message":"I think, that we have to either make these checks in every method, or don\u0027t use them at all. Actually, they are useless, since ZmqClientBase ensures valid message types for each request.","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"1dae435b8582b2293d5720aecc4b5bdcc2f30a4c","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @target_not_found_timeout"},{"line_number":132,"context_line":"    def send_call(self, request):"},{"line_number":133,"context_line":"        self._check_message_pattern(zmq_names.CALL_TYPE, request.msg_type)"},{"line_number":134,"context_line":"        with contextlib.closing("},{"line_number":135,"context_line":"                self.publisher.acquire_connection(request)) as socket:"},{"line_number":136,"context_line":"            self.publisher.send_request(socket, request)"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a8bc5a2_a7480a89","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":12},"in_reply_to":"5a8bc5a2_d1c182e5","updated":"2016-09-28 09:21:05.000000000","message":"Done","commit_id":"949ff2636891d9d3736b09c35b50455058030be1"}],"oslo_messaging/_drivers/zmq_driver/client/zmq_routing_table.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                self.routing_table.get_hosts_round_robin(target_key)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        rr_gen \u003d self.round_robin_targets[target_key]"},{"line_number":61,"context_line":"        host \u003d rr_gen.__next__() if six.PY3 else rr_gen.next()"},{"line_number":62,"context_line":"        LOG.debug(\"Host resolved for the current connection is %s\" % host)"},{"line_number":63,"context_line":"        return host"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_e2e45e3d","line":61,"range":{"start_line":61,"start_character":15,"end_line":61,"end_character":21},"updated":"2016-09-21 12:11:10.000000000","message":"next(rr_gen) works in both PY2 and PY3.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                self.routing_table.get_hosts_round_robin(target_key)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        rr_gen \u003d self.round_robin_targets[target_key]"},{"line_number":61,"context_line":"        host \u003d rr_gen.__next__() if six.PY3 else rr_gen.next()"},{"line_number":62,"context_line":"        LOG.debug(\"Host resolved for the current connection is %s\" % host)"},{"line_number":63,"context_line":"        return host"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_c82fec9f","line":61,"range":{"start_line":61,"start_character":15,"end_line":61,"end_character":21},"in_reply_to":"7a8ec9b2_e2e45e3d","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        for target_key in target_keys:"},{"line_number":183,"context_line":"            hosts \u003d self.matchmaker.get_hosts_by_key(target_key)"},{"line_number":184,"context_line":"            if hosts:"},{"line_number":185,"context_line":"                self.routing_table.update_hosts(target_key, hosts)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        LOG.debug(\"Updating routing table from the matchmaker. \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_6323f058","line":184,"range":{"start_line":184,"start_character":12,"end_line":184,"end_character":14},"updated":"2016-09-21 12:11:10.000000000","message":"Why don\u0027t we update the routing table here? If there are no hosts for a given target, we have to know about it in order to drop temporarily new corresponding messages, don\u0027t we?","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        for target_key in target_keys:"},{"line_number":183,"context_line":"            hosts \u003d self.matchmaker.get_hosts_by_key(target_key)"},{"line_number":184,"context_line":"            if hosts:"},{"line_number":185,"context_line":"                self.routing_table.update_hosts(target_key, hosts)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        LOG.debug(\"Updating routing table from the matchmaker. \""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_83af87e2","line":184,"range":{"start_line":184,"start_character":12,"end_line":184,"end_character":14},"in_reply_to":"7a8ec9b2_6323f058","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"}],"oslo_messaging/_drivers/zmq_driver/client/zmq_sockets_manager.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self._get_hosts_and_track(socket, target)"},{"line_number":71,"context_line":"        return socket"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_new_socket(self, target):"},{"line_number":74,"context_line":"        socket \u003d zmq_socket.ZmqSocket(self.conf, self.zmq_context,"},{"line_number":75,"context_line":"                                      self.socket_type, immediate\u003dFalse)"},{"line_number":76,"context_line":"        self._get_hosts_and_connect(socket, target)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_58534217","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":4},"updated":"2016-09-21 12:11:10.000000000","message":"Is this method used? Also it seems that sockets manager is not used anymore in DealerPublisherDirect. May be the method is intended for usage in DealerPublisherDirect?","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self._get_hosts_and_track(socket, target)"},{"line_number":71,"context_line":"        return socket"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_new_socket(self, target):"},{"line_number":74,"context_line":"        socket \u003d zmq_socket.ZmqSocket(self.conf, self.zmq_context,"},{"line_number":75,"context_line":"                                      self.socket_type, immediate\u003dFalse)"},{"line_number":76,"context_line":"        self._get_hosts_and_connect(socket, target)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_7ef932c8","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":4},"in_reply_to":"7a8ec9b2_58534217","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"}],"oslo_messaging/tests/drivers/zmq/test_routing_table.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"9bf56b7e18e1c120bdf63eb57db87c2e6d4e567e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"zmq \u003d zmq_async.import_zmq()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _next(rr_gen):"},{"line_number":26,"context_line":"    return rr_gen.next() if six.PY2 else rr_gen.__next__()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_74d3b0d5","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":3},"updated":"2016-09-21 12:11:10.000000000","message":"This function is not needed, since there is a built-in next(iterator[, default]) function in Python which does actually the same thing.","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"ee85ae5f4cfec0b328a95f3e05d90d6c7c29ac95","unresolved":false,"context_lines":[{"line_number":22,"context_line":"zmq \u003d zmq_async.import_zmq()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _next(rr_gen):"},{"line_number":26,"context_line":"    return rr_gen.next() if six.PY2 else rr_gen.__next__()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a8bc5a2_1e310ea3","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":3},"in_reply_to":"7a8ec9b2_74d3b0d5","updated":"2016-09-22 14:26:41.000000000","message":"Done","commit_id":"ebc66565959753aa420b5412bba4a468ae9df22a"}]}
