)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e10c856af15f6be9380a1396e9abbaa1476d5fa1","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"                            chunk \u003d part_file.read(self.app.object_chunk_size)"},{"line_number":1002,"context_line":"                            nchunks +\u003d 1"},{"line_number":1003,"context_line":"                            buf +\u003d chunk"},{"line_number":1004,"context_line":"                    except ChunkReadTimeout:"},{"line_number":1005,"context_line":"                        exc_type, exc_value, exc_traceback \u003d exc_info()"},{"line_number":1006,"context_line":"                        if self.newest or self.server_type !\u003d \u0027Object\u0027:"},{"line_number":1007,"context_line":"                            six.reraise(exc_type, exc_value, exc_traceback)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a44c039e","line":1004,"range":{"start_line":1004,"start_character":27,"end_line":1004,"end_character":43},"updated":"2018-06-14 00:27:40.000000000","message":"Could we catch that ChunkReadError here and try to finish servicing the request? It sucks that the best we do right now is just close the connection... the client gets the same truncated read and has to know to retry...","commit_id":"148a7058c1d45fedbe49ef1aac966c5971b801f0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b9c2bb592ebb5c8a57f282afb941548fb883be2d","unresolved":false,"context_lines":[{"line_number":776,"context_line":"                    self.nbytes - self.bytes_left, self.nbytes))"},{"line_number":777,"context_line":"        else:"},{"line_number":778,"context_line":"            self.bytes_left -\u003d len(chunk)"},{"line_number":779,"context_line":"            return chunk"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"class ResumingGetter(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_9f61123c","line":779,"updated":"2018-06-26 23:31:00.000000000","message":"Nothing for a long read when amt\u003ebytes_left (or amt\u003dNone)?","commit_id":"18ad414b87670594475ad62a7309b25c0c59d03d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"555bd7e235b27bebf3c407afa037e5639318d5ba","unresolved":false,"context_lines":[{"line_number":973,"context_line":"                            start_byte, end_byte, length, headers, part \u003d next("},{"line_number":974,"context_line":"                                parts_iter[0])"},{"line_number":975,"context_line":"                        return (start_byte, end_byte, length, headers, part)"},{"line_number":976,"context_line":"                    except ChunkReadTimeout:"},{"line_number":977,"context_line":"                        new_source, new_node \u003d self._get_source_and_node()"},{"line_number":978,"context_line":"                        if new_source:"},{"line_number":979,"context_line":"                            self.app.exception_occurred("}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_3228f884","line":976,"updated":"2019-01-22 21:38:37.000000000","message":"So why doesn\u0027t *this* need to handle ShortReadError?","commit_id":"18ad414b87670594475ad62a7309b25c0c59d03d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9fa993ca2af10314d3ab9374cbb533c47083a0f6","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"                        buf \u003d \u0027\u0027"},{"line_number":1016,"context_line":"                        new_source, new_node \u003d self._get_source_and_node()"},{"line_number":1017,"context_line":"                        if new_source:"},{"line_number":1018,"context_line":"                            self.app.exception_occurred("},{"line_number":1019,"context_line":"                                node[0], _(\u0027Object\u0027),"},{"line_number":1020,"context_line":"                                _(\u0027Trying to read during GET (retrying)\u0027))"},{"line_number":1021,"context_line":"                            # Close-out the connection as best as possible."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_617001a6","line":1018,"range":{"start_line":1018,"start_character":37,"end_line":1018,"end_character":55},"updated":"2018-06-27 20:07:59.000000000","message":"Feels a little noisy:\n\nJun 27 19:33:50 saio proxy-server: ERROR with Object server 127.0.0.1:6020/sdb2 re: Trying to read during GET (retrying):\nTraceback (most recent call last):\n  File \"/vagrant/swift/swift/proxy/controllers/base.py\", line 1002, in iter_bytes_from_response_part\n    chunk \u003d part_file.read(self.app.object_chunk_size)\n  File \"/vagrant/swift/swift/proxy/controllers/base.py\", line 776, in read\n    self.nbytes - self.bytes_left, self.nbytes))\nShortReadError: Too few bytes; read 35782656, expecting 104857600 (txn: tx09c270897ca34e55bbe0f-005b33e69b) (client_ip: 192.168.8.1)\n\nMaybe we ought to add a special case for ShortReadError around https://github.com/openstack/swift/blob/2.18.0/swift/common/utils.py#L1828-L1859 ?","commit_id":"18ad414b87670594475ad62a7309b25c0c59d03d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"555bd7e235b27bebf3c407afa037e5639318d5ba","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"                        buf \u003d \u0027\u0027"},{"line_number":1016,"context_line":"                        new_source, new_node \u003d self._get_source_and_node()"},{"line_number":1017,"context_line":"                        if new_source:"},{"line_number":1018,"context_line":"                            self.app.exception_occurred("},{"line_number":1019,"context_line":"                                node[0], _(\u0027Object\u0027),"},{"line_number":1020,"context_line":"                                _(\u0027Trying to read during GET (retrying)\u0027))"},{"line_number":1021,"context_line":"                            # Close-out the connection as best as possible."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d7ab9ed3","line":1018,"range":{"start_line":1018,"start_character":37,"end_line":1018,"end_character":55},"in_reply_to":"5f7c97a3_617001a6","updated":"2019-01-22 21:38:37.000000000","message":"Alternatively, this could use self.app.error_occurred()... I mean, we already *know* we\u0027re retrying; it\u0027s when retries are exhausted that I\u0027d maybe want a traceback...","commit_id":"18ad414b87670594475ad62a7309b25c0c59d03d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9fa993ca2af10314d3ab9374cbb533c47083a0f6","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                                read_chunk_size\u003dself.app.object_chunk_size)"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"                            try:"},{"line_number":1034,"context_line":"                                _junk, _junk, _junk, _junk, part_file \u003d \\"},{"line_number":1035,"context_line":"                                    get_next_doc_part()"},{"line_number":1036,"context_line":"                            except StopIteration:"},{"line_number":1037,"context_line":"                                # Tried to find a new node from which to"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2165294a","line":1034,"range":{"start_line":1034,"start_character":60,"end_line":1034,"end_character":69},"updated":"2018-06-27 20:07:59.000000000","message":"Should we be wrapping this part_file, too?","commit_id":"18ad414b87670594475ad62a7309b25c0c59d03d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e87e683ce8f784b2c612572e2ae6709779fb8c61","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"                                # Tried to find a new node from which to"},{"line_number":1041,"context_line":"                                # finish the GET, but failed. There\u0027s"},{"line_number":1042,"context_line":"                                # nothing more to do here."},{"line_number":1043,"context_line":"                                return"},{"line_number":1044,"context_line":"                            part_file \u003d ByteCountEnforcer(part_file, nbytes)"},{"line_number":1045,"context_line":"                        else:"},{"line_number":1046,"context_line":"                            six.reraise(exc_type, exc_value, exc_traceback)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_5ce4aeac","line":1043,"updated":"2019-01-23 20:36:27.000000000","message":"Seems like this should be a reraise of the original exception...","commit_id":"c8e64aa2761f801ca53e0f45ec565c9d177cfff7"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e10c856af15f6be9380a1396e9abbaa1476d5fa1","unresolved":false,"context_lines":[{"line_number":3816,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":3817,"context_line":"            got_exc \u003d False"},{"line_number":3818,"context_line":"            try:"},{"line_number":3819,"context_line":"                self.assertEqual(\u0027\u0027, resp.body)"},{"line_number":3820,"context_line":"            except ChunkReadTimeout:"},{"line_number":3821,"context_line":"                got_exc \u003d True"},{"line_number":3822,"context_line":"            self.assertTrue(got_exc)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a4be4362","side":"PARENT","line":3819,"range":{"start_line":3819,"start_character":21,"end_line":3819,"end_character":32},"updated":"2018-06-14 00:27:40.000000000","message":"Oh man, that was so stupid before...","commit_id":"c51e1c6a9cac202bf40a09e315aa6531d84912a1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e10c856af15f6be9380a1396e9abbaa1476d5fa1","unresolved":false,"context_lines":[{"line_number":2362,"context_line":"        real_fstat \u003d os.fstat"},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"        # stop the object server from immediately quarantining the object"},{"line_number":2365,"context_line":"        # and returning 404"},{"line_number":2366,"context_line":"        def lying_fstat(fd):"},{"line_number":2367,"context_line":"            sr \u003d real_fstat(fd)"},{"line_number":2368,"context_line":"            fake_stat_result \u003d posix.stat_result(("}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_84b78785","line":2365,"updated":"2018-06-14 00:27:40.000000000","message":"I kinda wish we could have at least one replica that\u0027s still whole, but ensure that we don\u0027t go the that server *first*...","commit_id":"148a7058c1d45fedbe49ef1aac966c5971b801f0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e10c856af15f6be9380a1396e9abbaa1476d5fa1","unresolved":false,"context_lines":[{"line_number":3878,"context_line":"            self.app.recoverable_node_timeout \u003d 0.1"},{"line_number":3879,"context_line":"            set_http_connect(200, 200, 200, slow\u003d1.0)"},{"line_number":3880,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":3881,"context_line":"            with self.assertRaises(ChunkReadTimeout):"},{"line_number":3882,"context_line":"                resp.body"},{"line_number":3883,"context_line":""},{"line_number":3884,"context_line":"    def test_node_read_timeout_retry(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_44840fb1","line":3881,"updated":"2018-06-14 00:27:40.000000000","message":"+1","commit_id":"148a7058c1d45fedbe49ef1aac966c5971b801f0"}]}
