)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":19,"context_line":"I have also purposefully distinguished between Connection Errors (and"},{"line_number":20,"context_line":"connect_retries) and HTTP errors. I don\u0027t know a good way to generalize"},{"line_number":21,"context_line":"retrying on HTTP errors and they can be added later if required."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: Ia219636663980433ddb9c00c6df7c8477df4ef99"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa98f980_7d2d958e","line":22,"updated":"2014-09-14 23:56:27.000000000","message":"Is there a bug or blueprint for this?\n\nIf no blueprint, add DocImpact.","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"}],"keystoneclient/adapter.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                         session one."},{"line_number":44,"context_line":"        :param str user_agent: The User-Agent string to set."},{"line_number":45,"context_line":"        :param int connect_retries: the maximum number of retries that should"},{"line_number":46,"context_line":"                                    be attempted for Connection Errors."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        self.session \u003d session"},{"line_number":49,"context_line":"        self.service_type \u003d service_type"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_bd529d10","line":46,"updated":"2014-09-14 23:56:27.000000000","message":"Also document what the default behavior is.","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"}],"keystoneclient/session.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"bdfee2d33e610c975a15ccd1e9b98d3eea7b3742","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            else:"},{"line_number":403,"context_line":"                kwargs[\u0027connect_retry_delay\u0027] \u003d connect_retry_delay"},{"line_number":404,"context_line":"                new_resp \u003d self._send_request(location, method, redirect, log,"},{"line_number":405,"context_line":"                                              connect_retries, **kwargs)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"                if not isinstance(new_resp.history, list):"},{"line_number":408,"context_line":"                    new_resp.history \u003d list(new_resp.history)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_5dc9ca24","line":405,"updated":"2014-09-04 11:13:34.000000000","message":"If connect_retries \u003d\u003d 0 (and this is possible because you modify passed parameter) redirect has only 1 chance","commit_id":"e923f4cb8176dd64f76455efc419991f5b297d40"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"bc75116f8adc77900263463506510e3a4a1e05fc","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                new_resp \u003d self._send_request("},{"line_number":408,"context_line":"                    location, method, redirect, log,"},{"line_number":409,"context_line":"                    connect_retries\u003doriginal_connect_retries,"},{"line_number":410,"context_line":"                    original_connect_retries\u003doriginal_connect_retries,"},{"line_number":411,"context_line":"                    **kwargs)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"                if not isinstance(new_resp.history, list):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_99d6c34d","line":410,"updated":"2014-09-05 08:28:47.000000000","message":"original_connect_retries is now saved across all redirects and function have lost protection from redirect loops (reaching recursion limit may take too long time). \nBut until it used only for PRG I think it\u0027s ok.\nM.b. decrement it: original_connect_retries\u003doriginal_connect_retries - 1?","commit_id":"1fb9f9278708801ddb5aac112544a8f35fc3ecfc"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                  integer for a specific count or True/False"},{"line_number":213,"context_line":"                                  for forever/never. (optional)"},{"line_number":214,"context_line":"        :param int connect_retries: the maximum number of retries that should"},{"line_number":215,"context_line":"                                    be attempted for Connection Errors."},{"line_number":216,"context_line":"                                    (optional) Default 0 (never retry)."},{"line_number":217,"context_line":"        :param bool authenticated: True if a token should be attached to this"},{"line_number":218,"context_line":"                                   request, False if not or None for attach if"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_dd55a1fa","line":215,"updated":"2014-09-14 23:56:27.000000000","message":"lowercase \"connection errors\"","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                                  for forever/never. (optional)"},{"line_number":214,"context_line":"        :param int connect_retries: the maximum number of retries that should"},{"line_number":215,"context_line":"                                    be attempted for Connection Errors."},{"line_number":216,"context_line":"                                    (optional) Default 0 (never retry)."},{"line_number":217,"context_line":"        :param bool authenticated: True if a token should be attached to this"},{"line_number":218,"context_line":"                                   request, False if not or None for attach if"},{"line_number":219,"context_line":"                                   an auth_plugin is available."}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_1d43a942","line":216,"updated":"2014-09-14 23:56:27.000000000","message":"change this to \"(optional, defaults to 0 so doesn\u0027t retry)\" for consistency","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            resp \u003d self.session.request(method, url, **kwargs)"},{"line_number":365,"context_line":"        except requests.exceptions.SSLError:"},{"line_number":366,"context_line":"            msg \u003d \u0027SSL exception connecting to %s\u0027 % url"},{"line_number":367,"context_line":"            raise exceptions.SSLError(msg)"},{"line_number":368,"context_line":"        except requests.exceptions.Timeout:"},{"line_number":369,"context_line":"            msg \u003d \u0027Request to %s timed out\u0027 % url"},{"line_number":370,"context_line":"            connect_failure \u003d exceptions.RequestTimeout(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_fd6fc5c1","line":367,"updated":"2014-09-14 23:56:27.000000000","message":"this isn\u0027t a connect_failure?","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                **kwargs)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        elif connect_failure:"},{"line_number":387,"context_line":"            raise connect_failure"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        if log:"},{"line_number":390,"context_line":"            self._http_log_response(response\u003dresp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_9d9dd9be","line":387,"updated":"2014-09-14 23:56:27.000000000","message":"this should raise with the right traceback rather than a new traceback -- https://pythonhosted.org/six/#six.reraise\n\nAn alternative is to put the \"if connect_failure\" code into a function so that it can be called from both places and a regular raise used.","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a70f3df26e0bfe13cd1e5af4644c83ad2b885fb0","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            redirect \u003d self.redirect"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        send_args \u003d (url, method, redirect, log, connect_retries)"},{"line_number":330,"context_line":"        resp \u003d self._send_request(*send_args, **kwargs)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # handle getting a 401 Unauthorized response by invalidating the plugin"},{"line_number":333,"context_line":"        # and then retrying the request. This is only tried once."}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_3e7be7f5","line":330,"updated":"2014-09-16 00:35:04.000000000","message":"this could also be done with a functools.partial:\n\n send_request \u003d functools.partial(url, method, redirect, log, connect_retries)\n resp \u003d send_request(**kwargs)\n\n(then use it again at 339)","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"cc0c18799fcfd40d8d9d2d0721bc2beaa0514cd6","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            redirect \u003d self.redirect"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        send_args \u003d (url, method, redirect, log, connect_retries)"},{"line_number":330,"context_line":"        resp \u003d self._send_request(*send_args, **kwargs)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # handle getting a 401 Unauthorized response by invalidating the plugin"},{"line_number":333,"context_line":"        # and then retrying the request. This is only tried once."}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_192d5d8f","line":330,"in_reply_to":"fa98f980_3e7be7f5","updated":"2014-09-16 01:03:15.000000000","message":"Done","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a70f3df26e0bfe13cd1e5af4644c83ad2b885fb0","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                raise"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            _logger.info(\u0027Failure: %s. Retrying in %.1fs.\u0027,"},{"line_number":380,"context_line":"                         connect_failure, connect_retry_delay)"},{"line_number":381,"context_line":"            time.sleep(connect_retry_delay)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"            return self._send_request("}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_be6ef72c","line":380,"updated":"2014-09-16 00:35:04.000000000","message":"connect_failure is always None here since it\u0027s not reset from line 361... I assume this was supposed to be the current exception.","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"cc0c18799fcfd40d8d9d2d0721bc2beaa0514cd6","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                raise"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            _logger.info(\u0027Failure: %s. Retrying in %.1fs.\u0027,"},{"line_number":380,"context_line":"                         connect_failure, connect_retry_delay)"},{"line_number":381,"context_line":"            time.sleep(connect_retry_delay)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"            return self._send_request("}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_996f8dc3","line":380,"in_reply_to":"fa98f980_be6ef72c","updated":"2014-09-16 01:03:15.000000000","message":"Done","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a70f3df26e0bfe13cd1e5af4644c83ad2b885fb0","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            _logger.info(\u0027Failure: %s. Retrying in %.1fs.\u0027,"},{"line_number":380,"context_line":"                         connect_failure, connect_retry_delay)"},{"line_number":381,"context_line":"            time.sleep(connect_retry_delay)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"            return self._send_request("},{"line_number":384,"context_line":"                url, method, redirect, log,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_3e62073e","line":381,"updated":"2014-09-16 00:35:04.000000000","message":"nasty. Remind me never to use this feature.","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"cc0c18799fcfd40d8d9d2d0721bc2beaa0514cd6","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"            _logger.info(\u0027Failure: %s. Retrying in %.1fs.\u0027,"},{"line_number":380,"context_line":"                         connect_failure, connect_retry_delay)"},{"line_number":381,"context_line":"            time.sleep(connect_retry_delay)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"            return self._send_request("},{"line_number":384,"context_line":"                url, method, redirect, log,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_b969b1bf","line":381,"in_reply_to":"fa98f980_3e62073e","updated":"2014-09-16 01:03:15.000000000","message":"I completely agree.","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"}],"keystoneclient/tests/test_session.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"64998a44bb57ff9a0e8aa0e987e3189f191bfaab","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        self.stub_url(\u0027GET\u0027, text\u003d_refused_error)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        with mock.patch(\u0027time.sleep\u0027) as m:"},{"line_number":711,"context_line":"            self.assertRaises(exceptions.ConnectionRefused,"},{"line_number":712,"context_line":"                              adpt.get, self.TEST_URL)"},{"line_number":713,"context_line":"            self.assertEqual(retries, m.call_count)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa98f980_fda6e50d","line":710,"updated":"2014-09-14 23:56:27.000000000","message":"suggest use mock.patch.object instead.","commit_id":"b83c30e6d7af0337bab45953794710e83d620949"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a70f3df26e0bfe13cd1e5af4644c83ad2b885fb0","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        self.stub_url(\u0027GET\u0027, text\u003d_refused_error)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        with mock.patch(\u0027time.sleep\u0027) as m:"},{"line_number":711,"context_line":"            self.assertRaises(exceptions.ConnectionRefused,"},{"line_number":712,"context_line":"                              adpt.get, self.TEST_URL)"},{"line_number":713,"context_line":"            self.assertEqual(retries, m.call_count)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_5e17cba2","line":710,"updated":"2014-09-16 00:35:04.000000000","message":"suggest use mock.patch.object instead.","commit_id":"7aa64e5cb4b1aa9d277f5514a88eaadd94c45031"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2f389d0f89238b75c00cb7547d6b50118e35c6c1","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        self.stub_url(\u0027GET\u0027, text\u003d_refused_error)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        with mock.patch(\u0027time.sleep\u0027) as m:"},{"line_number":711,"context_line":"            self.assertRaises(exceptions.ConnectionRefused,"},{"line_number":712,"context_line":"                              adpt.get, self.TEST_URL)"},{"line_number":713,"context_line":"            self.assertEqual(retries, m.call_count)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_af01436c","line":710,"updated":"2014-09-16 21:39:04.000000000","message":"suggest use mock.patch.object instead.","commit_id":"b5a435b9abd6b1275e2b6f1531498fef8194af02"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0c16530cd1db8a4e25ad8269d9e9b918bc9887e9","unresolved":false,"context_lines":[{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        self.stub_url(\u0027GET\u0027, text\u003d_refused_error)"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        with mock.patch(\u0027time.sleep\u0027) as m:"},{"line_number":711,"context_line":"            self.assertRaises(exceptions.ConnectionRefused,"},{"line_number":712,"context_line":"                              adpt.get, self.TEST_URL)"},{"line_number":713,"context_line":"            self.assertEqual(retries, m.call_count)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_006bf91f","line":710,"in_reply_to":"fa98f980_af01436c","updated":"2014-09-17 04:29:18.000000000","message":"++","commit_id":"b5a435b9abd6b1275e2b6f1531498fef8194af02"}]}
