)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"In most case this is the desired behavior."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But sometimes, we can prefer that the library raise an exception after a"},{"line_number":15,"context_line":"certain number of retries."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch allow this."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"9ad9bd40_110f942f","line":15,"updated":"2014-05-02 13:45:52.000000000","message":"I know it\u0027s described in the bug, but there might be no harm briefly mentioning Ceilometer\u0027s use case here\n\ni.e. that when publishing a storage.objects.incoming.bytes sample from the Swift middleware to an AMQP topic, you might not want to block the Swift client if the AMQP broker is unavailable - instead, you might have a queueing policy whereby if a single reconection attempt fails we queue the sample in memory and try again when another sample is to be published","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":12,"context_line":"In most case this is the desired behavior."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But sometimes, we can prefer that the library raise an exception after a"},{"line_number":15,"context_line":"certain number of retries."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch allow this."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"9ad9bd40_99e61414","line":15,"in_reply_to":"9ad9bd40_110f942f","updated":"2014-05-06 13:23:56.000000000","message":"Done, thx for the text :)","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"}],"oslo/messaging/_drivers/amqpdriver.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Otherwise use the msg_id for backward compatibility."},{"line_number":59,"context_line":"        if self.reply_q:"},{"line_number":60,"context_line":"            msg[\u0027_msg_id\u0027] \u003d self.msg_id"},{"line_number":61,"context_line":"            conn.direct_send(self.reply_q, rpc_common.serialize_msg(msg))"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            conn.direct_send(self.msg_id, rpc_common.serialize_msg(msg))"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_b158a833","line":61,"updated":"2014-05-02 13:45:52.000000000","message":"Curious what the retry policy for replies is","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Otherwise use the msg_id for backward compatibility."},{"line_number":59,"context_line":"        if self.reply_q:"},{"line_number":60,"context_line":"            msg[\u0027_msg_id\u0027] \u003d self.msg_id"},{"line_number":61,"context_line":"            conn.direct_send(self.reply_q, rpc_common.serialize_msg(msg))"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            conn.direct_send(self.msg_id, rpc_common.serialize_msg(msg))"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_d9ec1cf6","line":61,"in_reply_to":"9ad9bd40_b158a833","updated":"2014-05-06 13:23:56.000000000","message":"I have submitted a separate review for this","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        return self._send(target, ctxt, message, wait_for_reply, timeout,"},{"line_number":388,"context_line":"                          retry\u003dretry)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def send_notification(self, target, ctxt, message, version):"},{"line_number":391,"context_line":"        return self._send(target, ctxt, message,"},{"line_number":392,"context_line":"                          envelope\u003d(version \u003d\u003d 2.0), notify\u003dTrue)"},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_912ac47c","line":390,"updated":"2014-05-02 13:45:52.000000000","message":"Why not retries for notifications?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        return self._send(target, ctxt, message, wait_for_reply, timeout,"},{"line_number":388,"context_line":"                          retry\u003dretry)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def send_notification(self, target, ctxt, message, version):"},{"line_number":391,"context_line":"        return self._send(target, ctxt, message,"},{"line_number":392,"context_line":"                          envelope\u003d(version \u003d\u003d 2.0), notify\u003dTrue)"},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_79d0701f","line":390,"in_reply_to":"9ad9bd40_912ac47c","updated":"2014-05-06 13:23:56.000000000","message":"I have submitted a separate review","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"}],"oslo/messaging/_drivers/impl_qpid.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"6fddc6c43dd9429c01bb3909232b5bc3f00f606b","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        \"\"\"Handles reconnecting and re-establishing sessions and queues.\"\"\""},{"line_number":511,"context_line":"        delay \u003d 1"},{"line_number":512,"context_line":"        attempt \u003d 0"},{"line_number":513,"context_line":"        if not retry or retry \u003c 0:"},{"line_number":514,"context_line":"            retry \u003d 0"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2F1Ok%3D","line":513,"updated":"2014-03-03 21:58:15.000000000","message":"How would I indicate that I do not want the connection retried at all? Is that something we need to support? Can we differentiate between None and 0 for that?","commit_id":"25c6f7291c939126f46854c03293cb55e776c9b2"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"536073477fdb437fa41e3f6b3e1b813a5fb3285e","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        \"\"\"Handles reconnecting and re-establishing sessions and queues.\"\"\""},{"line_number":511,"context_line":"        delay \u003d 1"},{"line_number":512,"context_line":"        attempt \u003d 0"},{"line_number":513,"context_line":"        if not retry or retry \u003c 0:"},{"line_number":514,"context_line":"            retry \u003d 0"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2FlNY%3D","line":513,"in_reply_to":"AAAAVn%2F%2F1Ok%3D","updated":"2014-03-05 08:31:06.000000000","message":"Done","commit_id":"25c6f7291c939126f46854c03293cb55e776c9b2"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        self.brokers \u003d itertools.cycle(self.brokers_params)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        self.reconnect(retry\u003dself.conf.transport_connection_retries)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def connection_create(self, broker):"},{"line_number":496,"context_line":"        # Create the connection - this does not open the connection"},{"line_number":497,"context_line":"        self.connection \u003d qpid_messaging.Connection(broker[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_f195d040","line":494,"updated":"2014-05-02 13:45:52.000000000","message":"I\u0027d like to avoid reference config options in modules other than the module they are registered in\n\nI think we should just pass a retry parameter to the driver constructor and then pass it to the connection constructor","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        self.brokers \u003d itertools.cycle(self.brokers_params)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        self.reconnect(retry\u003dself.conf.transport_connection_retries)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def connection_create(self, broker):"},{"line_number":496,"context_line":"        # Create the connection - this does not open the connection"},{"line_number":497,"context_line":"        self.connection \u003d qpid_messaging.Connection(broker[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_f9a3a0af","line":494,"in_reply_to":"9ad9bd40_f195d040","updated":"2014-05-06 13:23:56.000000000","message":"As we have talked, the default connection retries have been removed.","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            if retry is None:"},{"line_number":591,"context_line":"                self._disconnect()"},{"line_number":592,"context_line":"            else:"},{"line_number":593,"context_line":"                self.reconnect(retry\u003dretry)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def close(self):"},{"line_number":596,"context_line":"        \"\"\"Close/release this connection.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_71bb80e5","line":593,"updated":"2014-05-02 13:45:52.000000000","message":"I\u0027m not loving this special handling of retry\u003dNone in this method\n\nAlso, re-indent the reconnection code into the except block - the way it is now, it\u0027s too easy to think it\u0027s not for error handling","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            if retry is None:"},{"line_number":591,"context_line":"                self._disconnect()"},{"line_number":592,"context_line":"            else:"},{"line_number":593,"context_line":"                self.reconnect(retry\u003dretry)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def close(self):"},{"line_number":596,"context_line":"        \"\"\"Close/release this connection.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_997b7427","line":593,"in_reply_to":"9ad9bd40_71bb80e5","updated":"2014-05-06 13:23:56.000000000","message":"Removing the default connection retries, simplify this a lot.","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"de7f320cd3d1145c486b5e1bde2401594d9a60b8","unresolved":false,"context_lines":[{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def notify_send(self, topic, msg, **kwargs):"},{"line_number":704,"context_line":"        \"\"\"Send a notify message on a topic.\"\"\""},{"line_number":705,"context_line":"        self.publisher_send(NotifyPublisher, topic, msg)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def consume(self, limit\u003dNone, timeout\u003dNone):"},{"line_number":708,"context_line":"        \"\"\"Consume from all queues/consumers.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_4f419d38","line":705,"updated":"2014-05-27 21:58:28.000000000","message":"is this purposely not using retry kwarg passed in?\n\nhttps://review.openstack.org/#/c/75365/29/oslo/messaging/_drivers/amqpdriver.py","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"a64da3e7ffe2993abd090ece6d0d1921cb5a6ec1","unresolved":false,"context_lines":[{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def notify_send(self, topic, msg, **kwargs):"},{"line_number":704,"context_line":"        \"\"\"Send a notify message on a topic.\"\"\""},{"line_number":705,"context_line":"        self.publisher_send(NotifyPublisher, topic, msg)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def consume(self, limit\u003dNone, timeout\u003dNone):"},{"line_number":708,"context_line":"        \"\"\"Consume from all queues/consumers.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_fbb69d3c","line":705,"in_reply_to":"3ae8d1ca_4f419d38","updated":"2014-05-28 07:51:14.000000000","message":"The purpose of the change is for rpc only, not for notification, because ceilometer use some hack around oslo.messaging that needs to be removed quickly. \n\nThe same change for notification is here and less urgent to review: https://review.openstack.org/#/c/92373/","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"54d3d33c288e69639e6154ea67f4c86b434dc228","unresolved":false,"context_lines":[{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def notify_send(self, topic, msg, **kwargs):"},{"line_number":704,"context_line":"        \"\"\"Send a notify message on a topic.\"\"\""},{"line_number":705,"context_line":"        self.publisher_send(NotifyPublisher, topic, msg)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def consume(self, limit\u003dNone, timeout\u003dNone):"},{"line_number":708,"context_line":"        \"\"\"Consume from all queues/consumers.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_08f4d659","line":705,"in_reply_to":"3ae8d1ca_fbb69d3c","updated":"2014-05-28 12:59:57.000000000","message":"cool cool. thanks for explanation.","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":"            LOG.debug(\"Re-established AMQP queues\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def ensure(self, error_callback, method, retry\u003dNone, *args, **kwargs):"},{"line_number":577,"context_line":"        while True:"},{"line_number":578,"context_line":"            try:"},{"line_number":579,"context_line":"                return method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_ea27fb0f","line":576,"updated":"2014-06-13 15:17:13.000000000","message":"Having a kwarg before the *args list looks bad - see my follow up patch","commit_id":"948c05417c7a44f85d3e77bae35e02f5c31834d7"}],"oslo/messaging/_drivers/impl_rabbit.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        self.connection \u003d None"},{"line_number":484,"context_line":"        self.do_consume \u003d None"},{"line_number":485,"context_line":"        self.reconnect(retry\u003dself.conf.transport_connection_retries)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    # FIXME(markmc): use oslo sslutils when it is available as a library"},{"line_number":488,"context_line":"    _SSL_PROTOCOLS \u003d {"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_11915452","line":485,"updated":"2014-05-02 13:45:52.000000000","message":"Same comment about passing this value through from oslo.messaging.transport","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        self.connection \u003d None"},{"line_number":484,"context_line":"        self.do_consume \u003d None"},{"line_number":485,"context_line":"        self.reconnect(retry\u003dself.conf.transport_connection_retries)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    # FIXME(markmc): use oslo sslutils when it is available as a library"},{"line_number":488,"context_line":"    _SSL_PROTOCOLS \u003d {"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_b9faf840","line":485,"in_reply_to":"9ad9bd40_11915452","updated":"2014-05-06 13:23:56.000000000","message":"Removed","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":559,"context_line":"            except self.connection_errors:"},{"line_number":560,"context_line":"                pass"},{"line_number":561,"context_line":"            # Setting this in case the next statement fails, though"},{"line_number":562,"context_line":"            # it shouldn\u0027t be doing any network operations, yet."},{"line_number":563,"context_line":"            self.connection \u003d None"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def reconnect(self, retry\u003d0):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_71b700d9","line":562,"updated":"2014-05-02 13:45:52.000000000","message":"That comment doesn\u0027t make sense anymore, just remove","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":559,"context_line":"            except self.connection_errors:"},{"line_number":560,"context_line":"                pass"},{"line_number":561,"context_line":"            # Setting this in case the next statement fails, though"},{"line_number":562,"context_line":"            # it shouldn\u0027t be doing any network operations, yet."},{"line_number":563,"context_line":"            self.connection \u003d None"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def reconnect(self, retry\u003d0):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_798b10c3","line":562,"in_reply_to":"9ad9bd40_71b700d9","updated":"2014-05-06 13:23:56.000000000","message":"Done","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \"\"\"Handles reconnecting and re-establishing queues."},{"line_number":567,"context_line":"        Will retry up to retry number of times."},{"line_number":568,"context_line":"        retry \u003d 0 means to retry forever."},{"line_number":569,"context_line":"        retry \u003d None means no retry."},{"line_number":570,"context_line":"        Sleep between tries, starting at self.interval_start"},{"line_number":571,"context_line":"        seconds, backing off self.interval_stepping number of seconds"},{"line_number":572,"context_line":"        each attempt."}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_f17cf022","line":569,"updated":"2014-05-02 13:45:52.000000000","message":"Kinda feel that adding retry\u003dNone support could have been a separate patch","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \"\"\"Handles reconnecting and re-establishing queues."},{"line_number":567,"context_line":"        Will retry up to retry number of times."},{"line_number":568,"context_line":"        retry \u003d 0 means to retry forever."},{"line_number":569,"context_line":"        retry \u003d None means no retry."},{"line_number":570,"context_line":"        Sleep between tries, starting at self.interval_start"},{"line_number":571,"context_line":"        seconds, backing off self.interval_stepping number of seconds"},{"line_number":572,"context_line":"        each attempt."}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_b9a83821","line":569,"in_reply_to":"9ad9bd40_f17cf022","updated":"2014-05-06 13:23:56.000000000","message":"No more needed","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                if self.conf.kombu_reconnect_delay \u003e 0:"},{"line_number":588,"context_line":"                    LOG.info(_(\"Delaying reconnect for %1.1f seconds...\") %"},{"line_number":589,"context_line":"                             self.conf.kombu_reconnect_delay)"},{"line_number":590,"context_line":"                    time.sleep(self.conf.kombu_reconnect_delay)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"            self._disconnect()"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_d1b44cd3","line":590,"updated":"2014-05-02 13:45:52.000000000","message":"Why not put this kludge in _disconnect() ?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                if self.conf.kombu_reconnect_delay \u003e 0:"},{"line_number":588,"context_line":"                    LOG.info(_(\"Delaying reconnect for %1.1f seconds...\") %"},{"line_number":589,"context_line":"                             self.conf.kombu_reconnect_delay)"},{"line_number":590,"context_line":"                    time.sleep(self.conf.kombu_reconnect_delay)"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"            self._disconnect()"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_d9a5fc47","line":590,"in_reply_to":"9ad9bd40_d1b44cd3","updated":"2014-05-06 13:23:56.000000000","message":"Done","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            log_info[\u0027retry\u0027] \u003d retry or 0"},{"line_number":616,"context_line":"            log_info.update(broker)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"            if retry is None or attempt \u003d\u003d retry !\u003d 0:"},{"line_number":619,"context_line":"                msg \u003d _(\u0027Unable to connect to AMQP server on \u0027"},{"line_number":620,"context_line":"                        \u0027%(hostname)s:%(port)d after %(retry)d \u0027"},{"line_number":621,"context_line":"                        \u0027tries: %(err_str)s\u0027) % log_info"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_11695425","line":618,"updated":"2014-05-02 13:45:52.000000000","message":"Is this \"!\u003d 0\" a mistake or am I too stupid to understand some clever trick here?\n\nSeems to me you meant:\n\n  if retry is None or attempt \u003d\u003d retry:\n\nif so, sounds like tests need improvement","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            log_info[\u0027retry\u0027] \u003d retry or 0"},{"line_number":616,"context_line":"            log_info.update(broker)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"            if retry is None or attempt \u003d\u003d retry !\u003d 0:"},{"line_number":619,"context_line":"                msg \u003d _(\u0027Unable to connect to AMQP server on \u0027"},{"line_number":620,"context_line":"                        \u0027%(hostname)s:%(port)d after %(retry)d \u0027"},{"line_number":621,"context_line":"                        \u0027tries: %(err_str)s\u0027) % log_info"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_b97f58aa","line":618,"in_reply_to":"9ad9bd40_11695425","updated":"2014-05-06 13:23:56.000000000","message":"The test is correct :p\n\nI have reworked variable naming, to make this more clear.","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    def ensure(self, error_callback, method, retry\u003d0, *args, **kwargs):"},{"line_number":639,"context_line":"        while True:"},{"line_number":640,"context_line":"            if retry is None and not self.connection:"},{"line_number":641,"context_line":"                self.reconnect(retry\u003dNone)"},{"line_number":642,"context_line":"            try:"},{"line_number":643,"context_line":"                return method(*args, **kwargs)"},{"line_number":644,"context_line":"            except self.connection_errors as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_b15b4886","line":641,"updated":"2014-05-02 13:45:52.000000000","message":"Why just do this for retry\u003dNone? If we fail after max_retries, don\u0027t we want to attempt to reconnect next time we send?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    def ensure(self, error_callback, method, retry\u003d0, *args, **kwargs):"},{"line_number":639,"context_line":"        while True:"},{"line_number":640,"context_line":"            if retry is None and not self.connection:"},{"line_number":641,"context_line":"                self.reconnect(retry\u003dNone)"},{"line_number":642,"context_line":"            try:"},{"line_number":643,"context_line":"                return method(*args, **kwargs)"},{"line_number":644,"context_line":"            except self.connection_errors as e:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_79607001","line":641,"in_reply_to":"9ad9bd40_b15b4886","updated":"2014-05-06 13:23:56.000000000","message":"Removing non-driver-specific rabbit_max_retries code make this more clear","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"de7f320cd3d1145c486b5e1bde2401594d9a60b8","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        Will retry up to retry number of times."},{"line_number":585,"context_line":"        retry \u003d None means use the value of rabbit_max_retries"},{"line_number":586,"context_line":"        retry \u003d -1 means to retry forever"},{"line_number":587,"context_line":"        retry \u003d 0 means no retry"},{"line_number":588,"context_line":"        retry \u003d N means N retries"},{"line_number":589,"context_line":"        Sleep between tries, starting at self.interval_start"},{"line_number":590,"context_line":"        seconds, backing off self.interval_stepping number of seconds"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_efa0a9f6","line":587,"updated":"2014-05-27 21:58:28.000000000","message":"this doesn\u0027t match help statement in option above:\n\nhttps://github.com/openstack/oslo.messaging/blob/master/oslo/messaging/_drivers/impl_rabbit.py#L93-L96","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"54d3d33c288e69639e6154ea67f4c86b434dc228","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        Will retry up to retry number of times."},{"line_number":585,"context_line":"        retry \u003d None means use the value of rabbit_max_retries"},{"line_number":586,"context_line":"        retry \u003d -1 means to retry forever"},{"line_number":587,"context_line":"        retry \u003d 0 means no retry"},{"line_number":588,"context_line":"        retry \u003d N means N retries"},{"line_number":589,"context_line":"        Sleep between tries, starting at self.interval_start"},{"line_number":590,"context_line":"        seconds, backing off self.interval_stepping number of seconds"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_089bf618","line":587,"in_reply_to":"3ae8d1ca_1b90a942","updated":"2014-05-28 12:59:57.000000000","message":"missed that comment. makes sense to me.","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"a64da3e7ffe2993abd090ece6d0d1921cb5a6ec1","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        Will retry up to retry number of times."},{"line_number":585,"context_line":"        retry \u003d None means use the value of rabbit_max_retries"},{"line_number":586,"context_line":"        retry \u003d -1 means to retry forever"},{"line_number":587,"context_line":"        retry \u003d 0 means no retry"},{"line_number":588,"context_line":"        retry \u003d N means N retries"},{"line_number":589,"context_line":"        Sleep between tries, starting at self.interval_start"},{"line_number":590,"context_line":"        seconds, backing off self.interval_stepping number of seconds"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_1b90a942","line":587,"in_reply_to":"3ae8d1ca_efa0a9f6","updated":"2014-05-28 07:51:14.000000000","message":"Those options are unrelated, and as we have discussed with markmc, the rabbit_max_retries will disappear in the future because a non zero value result to a unpredictable behavior, you can read the discussion about this on PatchSet 25 comments.\n\nThe retry option here have the wanted description and behavior.","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                sleep_time \u003d self.interval_start or 1"},{"line_number":625,"context_line":"            elif attempt \u003e 1:"},{"line_number":626,"context_line":"                sleep_time +\u003d self.interval_stepping"},{"line_number":627,"context_line":"            if self.interval_max:"},{"line_number":628,"context_line":"                sleep_time \u003d min(sleep_time, self.interval_max)"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            log_info[\u0027sleep_time\u0027] \u003d sleep_time"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_ad0d0dea","side":"PARENT","line":627,"updated":"2014-06-13 15:17:13.000000000","message":"Not sure why you removed this but, but we never change it from 30 ... so, ok","commit_id":"7d927e5e10a06570666948d01721a7a737921f67"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        LOG.info(_(\u0027Connected to AMQP server on %(hostname)s:%(port)d\u0027) %"},{"line_number":561,"context_line":"                 broker)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    def _disconnect(self):"},{"line_number":564,"context_line":"        if self.connection:"},{"line_number":565,"context_line":"            # XXX(nic): when reconnecting to a RabbitMQ cluster"},{"line_number":566,"context_line":"            # with mirrored queues in use, the attempt to release the"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_4a51cf2e","line":563,"updated":"2014-06-13 15:17:13.000000000","message":"This is kind of poorly named as its not a generic disconnect() method but a \"get ready to reconnect\" method - i.e. we\u0027re not using it from close()\n\nNot a big deal","commit_id":"948c05417c7a44f85d3e77bae35e02f5c31834d7"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            log_info[\u0027retry\u0027] \u003d retry or 0"},{"line_number":626,"context_line":"            log_info.update(broker)"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"            if not loop_forever and attempt \u003e retry:"},{"line_number":629,"context_line":"                msg \u003d _(\u0027Unable to connect to AMQP server on \u0027"},{"line_number":630,"context_line":"                        \u0027%(hostname)s:%(port)d after %(retry)d \u0027"},{"line_number":631,"context_line":"                        \u0027tries: %(err_str)s\u0027) % log_info"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_ed97158e","line":628,"updated":"2014-06-13 15:17:13.000000000","message":"Hmm ... I can\u0027t decide whether this is correct or not\n\ne.g. should retry\u003d0 mean \"don\u0027t attempt to reconnect if message sending fails\" or \"don\u0027t *retry* reconnecting if messaging sending fails\"\n\ni.e. should retry\u003d1 mean \"make a single reconnection\" attempt?\n\nLet\u0027s go with your approach of saying it means don\u0027t attempt to reconnect","commit_id":"948c05417c7a44f85d3e77bae35e02f5c31834d7"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":645,"context_line":"                            \u0027%(sleep_time)d seconds.\u0027) % log_info)"},{"line_number":646,"context_line":"                time.sleep(sleep_time)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def ensure(self, error_callback, method, retry\u003dNone, *args, **kwargs):"},{"line_number":649,"context_line":"        while True:"},{"line_number":650,"context_line":"            try:"},{"line_number":651,"context_line":"                return method(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_2a1e43bb","line":648,"updated":"2014-06-13 15:17:13.000000000","message":"Follow up patch for this too","commit_id":"948c05417c7a44f85d3e77bae35e02f5c31834d7"}],"oslo/messaging/_drivers/impl_zmq.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":942,"context_line":"    def send(self, target, ctxt, message, wait_for_reply\u003dNone, timeout\u003dNone,"},{"line_number":943,"context_line":"             retry\u003d0):"},{"line_number":944,"context_line":"        #NOTE(sileht): retry is not implemented because this driver never"},{"line_number":945,"context_line":"        #retry anything"},{"line_number":946,"context_line":"        return self._send(target, ctxt, message, wait_for_reply, timeout)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def send_notification(self, target, ctxt, message, version):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_11feb438","line":945,"updated":"2014-05-02 13:45:52.000000000","message":"Is this a bug, then? Or is the notion of retries a driver-specific notion? If it\u0027s driver specific, then why would we expose it in the public API?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":942,"context_line":"    def send(self, target, ctxt, message, wait_for_reply\u003dNone, timeout\u003dNone,"},{"line_number":943,"context_line":"             retry\u003d0):"},{"line_number":944,"context_line":"        #NOTE(sileht): retry is not implemented because this driver never"},{"line_number":945,"context_line":"        #retry anything"},{"line_number":946,"context_line":"        return self._send(target, ctxt, message, wait_for_reply, timeout)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def send_notification(self, target, ctxt, message, version):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_39e7c8ad","line":945,"in_reply_to":"9ad9bd40_11feb438","updated":"2014-05-06 13:23:56.000000000","message":"The reason is this driver raise a generic and uncatchable RPCException at many different places instead of ensuring the message is delivered to the broker. (Mainly they are no really a broker in zmq).","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"}],"oslo/messaging/exceptions.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MessagingDisconnected(MessagingException):"},{"line_number":29,"context_line":"    \"\"\"Raised if message sending failed after the asked retry.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class InvalidTarget(MessagingException, ValueError):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_7132a011","line":29,"updated":"2014-05-02 13:45:52.000000000","message":"\"disconnected\" is a kind of a driver specific notion\n\ne.g. if we had a HTTP based driver that opened a new connect for each message?\n\nMessageDeliveryFailure ?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MessagingDisconnected(MessagingException):"},{"line_number":29,"context_line":"    \"\"\"Raised if message sending failed after the asked retry.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class InvalidTarget(MessagingException, ValueError):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_59ec8c8f","line":29,"in_reply_to":"9ad9bd40_7132a011","updated":"2014-05-06 13:23:56.000000000","message":"Done","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"}],"oslo/messaging/rpc/client.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    _marker \u003d object()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __init__(self, transport, target, serializer,"},{"line_number":87,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, retry\u003dNone):"},{"line_number":88,"context_line":"        self.conf \u003d transport.conf"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_4c5ee313","line":87,"updated":"2014-05-02 13:45:52.000000000","message":"Should be _retry\u003d_marker ?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    _marker \u003d object()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __init__(self, transport, target, serializer,"},{"line_number":87,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, retry\u003dNone):"},{"line_number":88,"context_line":"        self.conf \u003d transport.conf"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_19a3e401","line":87,"in_reply_to":"9ad9bd40_4c5ee313","updated":"2014-05-06 13:23:56.000000000","message":"Perhaps I have missunderstood something, but I have used _marker in prepare methods, to use the value of the constructor, and the value into the constructor is the default one. So I think None here should be good.","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    \"\"\""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def __init__(self, transport, target,"},{"line_number":260,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, serializer\u003dNone, retry\u003dNone):"},{"line_number":261,"context_line":"        \"\"\"Construct an RPC client."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        :param transport: a messaging transport handle"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_cc24b3b1","line":260,"updated":"2014-05-02 13:45:52.000000000","message":"retry\u003dNone has special semantics - do we need retry\u003d_marker ?","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    \"\"\""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def __init__(self, transport, target,"},{"line_number":260,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, serializer\u003dNone, retry\u003dNone):"},{"line_number":261,"context_line":"        \"\"\"Construct an RPC client."},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        :param transport: a messaging transport handle"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_79b15046","line":260,"in_reply_to":"9ad9bd40_cc24b3b1","updated":"2014-05-06 13:23:56.000000000","message":"Same","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        :type fanout: bool"},{"line_number":312,"context_line":"        :param timeout: an optional default timeout (in seconds) for call()s"},{"line_number":313,"context_line":"        :type timeout: int or float"},{"line_number":314,"context_line":"        :param retry: an optional default retry for call()s (0 means infinite)"},{"line_number":315,"context_line":"        :type retry: int"},{"line_number":316,"context_line":"        :param version_cap: raise a RPCVersionCapError version exceeds this cap"},{"line_number":317,"context_line":"        :type version_cap: str"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_5102fc0b","line":314,"updated":"2014-05-02 13:45:52.000000000","message":"Need to document the other semantics - i.e. that its an integer number of times to try (not e.g. number of seconds to keep retrying), that retry\u003dNone is valid and what exception will be raised","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        :type fanout: bool"},{"line_number":312,"context_line":"        :param timeout: an optional default timeout (in seconds) for call()s"},{"line_number":313,"context_line":"        :type timeout: int or float"},{"line_number":314,"context_line":"        :param retry: an optional default retry for call()s (0 means infinite)"},{"line_number":315,"context_line":"        :type retry: int"},{"line_number":316,"context_line":"        :param version_cap: raise a RPCVersionCapError version exceeds this cap"},{"line_number":317,"context_line":"        :type version_cap: str"}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_590d6c36","line":314,"in_reply_to":"9ad9bd40_5102fc0b","updated":"2014-05-06 13:23:56.000000000","message":"Done","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        :param method: the method name"},{"line_number":336,"context_line":"        :type method: str"},{"line_number":337,"context_line":"        :param kwargs: a dict of method arguments"},{"line_number":338,"context_line":"        :type kwargs: dict"},{"line_number":339,"context_line":"        \"\"\""},{"line_number":340,"context_line":"        self.prepare().cast(ctxt, method, **kwargs)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_ec13375a","line":338,"updated":"2014-05-02 13:45:52.000000000","message":"Add raises","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        :param method: the method name"},{"line_number":336,"context_line":"        :type method: str"},{"line_number":337,"context_line":"        :param kwargs: a dict of method arguments"},{"line_number":338,"context_line":"        :type kwargs: dict"},{"line_number":339,"context_line":"        \"\"\""},{"line_number":340,"context_line":"        self.prepare().cast(ctxt, method, **kwargs)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_7915d03e","line":338,"in_reply_to":"9ad9bd40_ec13375a","updated":"2014-05-06 13:23:56.000000000","message":"Done","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        :type method: str"},{"line_number":372,"context_line":"        :param kwargs: a dict of method arguments"},{"line_number":373,"context_line":"        :type kwargs: dict"},{"line_number":374,"context_line":"        :raises: MessagingTimeout, RemoteError"},{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        return self.prepare().call(ctxt, method, **kwargs)"},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_ac0a0f1f","line":374,"updated":"2014-05-02 13:45:52.000000000","message":"Add the new exception","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b632e2ae24aeed84cf3ba129f1d1c0ce0703393c","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        client.call(ctxt, \u0027test\u0027, arg\u003darg)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    but this is probably only useful in limited circumstances as a wrapper"},{"line_number":248,"context_line":"    class will usually help to make the code much more obvious."},{"line_number":249,"context_line":"    \"\"\""},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def __init__(self, transport, target,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1ae5cdf2_4a70ef07","line":248,"updated":"2014-06-13 15:17:13.000000000","message":"Could do with example usage here, see follow-up patch","commit_id":"948c05417c7a44f85d3e77bae35e02f5c31834d7"}],"oslo/messaging/transport.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b3eb337034bc14af7b1c3fbc8476bd6cb990e70c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               default\u003d0,"},{"line_number":55,"context_line":"               deprecated_opts\u003d[cfg.DeprecatedOpt(\u0027rabbit_max_retries\u0027)],"},{"line_number":56,"context_line":"               help\u003d\u0027Maximum number of transport connection retries. \u0027"},{"line_number":57,"context_line":"                    \u0027Default is 0 (infinite retry count)\u0027)"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_0cc05b7b","line":57,"updated":"2014-05-02 13:45:52.000000000","message":"We should probably start a new [messaging] group rather than polluting the [DEFAULT] group with this","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ffb246a878f714f9a5c20c35d088901e083a024","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               default\u003d0,"},{"line_number":55,"context_line":"               deprecated_opts\u003d[cfg.DeprecatedOpt(\u0027rabbit_max_retries\u0027)],"},{"line_number":56,"context_line":"               help\u003d\u0027Maximum number of transport connection retries. \u0027"},{"line_number":57,"context_line":"                    \u0027Default is 0 (infinite retry count)\u0027)"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9ad9bd40_fe62a63c","line":57,"in_reply_to":"9ad9bd40_0cc05b7b","updated":"2014-05-06 13:23:56.000000000","message":"Removed","commit_id":"42bf84d861692e6a017fbb5e31f1c994d4509c49"}],"tests/test_qpid.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"de7f320cd3d1145c486b5e1bde2401594d9a60b8","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        self.assertRaises(messaging.MessageDeliveryFailure,"},{"line_number":716,"context_line":"                          self.connection.reconnect,"},{"line_number":717,"context_line":"                          retry\u003dlen(self.brokers) - 1)"},{"line_number":718,"context_line":"        self.assertEqual(len(self.brokers), self.info[\u0027attempt\u0027])"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_ensure_four_retries(self):"},{"line_number":721,"context_line":"        mock_callback \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_74238c05","line":718,"updated":"2014-05-27 21:58:28.000000000","message":"brokers_count isn\u0027t used anywhere... we should probably use it here or drop it above.","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"a64da3e7ffe2993abd090ece6d0d1921cb5a6ec1","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        self.assertRaises(messaging.MessageDeliveryFailure,"},{"line_number":716,"context_line":"                          self.connection.reconnect,"},{"line_number":717,"context_line":"                          retry\u003dlen(self.brokers) - 1)"},{"line_number":718,"context_line":"        self.assertEqual(len(self.brokers), self.info[\u0027attempt\u0027])"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def test_ensure_four_retries(self):"},{"line_number":721,"context_line":"        mock_callback \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_18326f10","line":718,"in_reply_to":"3ae8d1ca_74238c05","updated":"2014-05-28 07:51:14.000000000","message":"Done","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"}],"tests/test_rabbit.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"de7f320cd3d1145c486b5e1bde2401594d9a60b8","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        self.assertRaises(messaging.MessageDeliveryFailure,"},{"line_number":673,"context_line":"                          self.connection.reconnect,"},{"line_number":674,"context_line":"                          retry\u003dlen(self.brokers) - 1)"},{"line_number":675,"context_line":"        self.assertEqual(len(self.brokers), self.info[\u0027attempt\u0027])"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    def test_ensure_four_retry(self):"},{"line_number":678,"context_line":"        mock_callback \u003d mock.Mock(side_effect\u003dIOError)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_d4046080","line":675,"updated":"2014-05-27 21:58:28.000000000","message":"brokers_count isn\u0027t used anywhere... we should probably use it here or drop it above.","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"a64da3e7ffe2993abd090ece6d0d1921cb5a6ec1","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        self.assertRaises(messaging.MessageDeliveryFailure,"},{"line_number":673,"context_line":"                          self.connection.reconnect,"},{"line_number":674,"context_line":"                          retry\u003dlen(self.brokers) - 1)"},{"line_number":675,"context_line":"        self.assertEqual(len(self.brokers), self.info[\u0027attempt\u0027])"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    def test_ensure_four_retry(self):"},{"line_number":678,"context_line":"        mock_callback \u003d mock.Mock(side_effect\u003dIOError)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ae8d1ca_d8580759","line":675,"in_reply_to":"3ae8d1ca_d4046080","updated":"2014-05-28 07:51:14.000000000","message":"Done","commit_id":"a5b99370c4e8c08516f5eecf50d17707ebd4c0d2"}]}
