)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e52a0a73b7730e5371810eb7732753858b7cd02b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"EC: support multiple ranges for GET requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit lets clients receive multipart/byteranges responses (see"},{"line_number":10,"context_line":"RFC 7232, Appendix A) for erasure-coded objects. Clients can already"},{"line_number":11,"context_line":"do this for replicated objects, so this brings EC closer to feature"},{"line_number":12,"context_line":"parity (ha!)."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a016987_9d97bb8f","line":10,"updated":"2015-05-29 15:45:10.000000000","message":"Having carefully studied the content of rfc7232 appendix A, looking for an angle on range requests, I am thinking you may mean rfc7233? :)","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b110fbd6748a7c6e2de7e5136a211632d8b0dfb6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"EC: support multiple ranges for GET requests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit lets clients receive multipart/byteranges responses (see"},{"line_number":10,"context_line":"RFC 7232, Appendix A) for erasure-coded objects. Clients can already"},{"line_number":11,"context_line":"do this for replicated objects, so this brings EC closer to feature"},{"line_number":12,"context_line":"parity (ha!)."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5afe65bd_baf2b96d","line":10,"updated":"2015-06-03 16:22:15.000000000","message":"Its RFC 7233","commit_id":"9d357d690cba111d39d2201b30a49c2b58d042f1"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e52a0a73b7730e5371810eb7732753858b7cd02b","unresolved":false,"context_lines":[{"line_number":697,"context_line":"        \"\"\""},{"line_number":698,"context_line":"        if \u0027Range\u0027 in self.backend_headers:"},{"line_number":699,"context_line":"            req_range \u003d Range(self.backend_headers[\u0027Range\u0027])"},{"line_number":700,"context_line":"            begin, end \u003d req_range.ranges.pop(0)"},{"line_number":701,"context_line":"            if len(req_range.ranges) \u003e 0:"},{"line_number":702,"context_line":"                self.backend_headers[\u0027Range\u0027] \u003d str(req_range)"},{"line_number":703,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_bdb71784","line":700,"updated":"2015-05-29 15:45:10.000000000","message":"nit: begin, end are not used","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e52a0a73b7730e5371810eb7732753858b7cd02b","unresolved":false,"context_lines":[{"line_number":872,"context_line":"                            if buf:"},{"line_number":873,"context_line":"                                with ChunkWriteTimeout("},{"line_number":874,"context_line":"                                        self.app.client_timeout):"},{"line_number":875,"context_line":"                                    bytes_used_from_backend +\u003d len(buf)"},{"line_number":876,"context_line":"                                    yield buf"},{"line_number":877,"context_line":"                                buf \u003d \u0027\u0027"},{"line_number":878,"context_line":"                            break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_83e5180a","line":875,"updated":"2015-05-29 15:45:10.000000000","message":"nit: bytes_used_from_backend is not used after this assignment","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e52a0a73b7730e5371810eb7732753858b7cd02b","unresolved":false,"context_lines":[{"line_number":874,"context_line":"                                        self.app.client_timeout):"},{"line_number":875,"context_line":"                                    bytes_used_from_backend +\u003d len(buf)"},{"line_number":876,"context_line":"                                    yield buf"},{"line_number":877,"context_line":"                                buf \u003d \u0027\u0027"},{"line_number":878,"context_line":"                            break"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"                        if client_chunk_size is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_63ee9cee","line":877,"updated":"2015-05-29 15:45:10.000000000","message":"nit: buf is not used after this assignment","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"e4aa53e34d19c92eb870ee1f7a07869073943f3d","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        \"\"\""},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        ct \u003d source.getheader(\u0027Content-Type\u0027)"},{"line_number":1069,"context_line":"        if ct:"},{"line_number":1070,"context_line":"            content_type, content_type_attrs \u003d parse_content_type(ct)"},{"line_number":1071,"context_line":"            is_multipart \u003d content_type \u003d\u003d \u0027multipart/byteranges\u0027"},{"line_number":1072,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_6bd48646","line":1069,"updated":"2015-11-10 16:58:35.000000000","message":"ct will always be set in a Response right?  Can this ever be not true?","commit_id":"4f2ed8bcd0468f3b69d5fded274d8d6b02ac3d10"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b110fbd6748a7c6e2de7e5136a211632d8b0dfb6","unresolved":false,"context_lines":[{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"        self._fill_out_range_specs_from_obj_length(range_specs)"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        base_content_type, _junk \u003d parse_content_type("},{"line_number":1335,"context_line":"            resp_headers.get(\u0027Content-Type\u0027, \u0027\u0027))"},{"line_number":1336,"context_line":"        multipart \u003d (len([rs for rs in range_specs if rs[\u0027satisfiable\u0027]]) \u003e 1)"},{"line_number":1337,"context_line":"        # Multipart responses are not required to be in the same order as"}],"source_content_type":"text/x-python","patch_set":3,"id":"5afe65bd_a0584833","line":1334,"updated":"2015-06-03 16:22:15.000000000","message":"not clear to me why there is a call to parse_content_type here, the return values are never used","commit_id":"9d357d690cba111d39d2201b30a49c2b58d042f1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b110fbd6748a7c6e2de7e5136a211632d8b0dfb6","unresolved":false,"context_lines":[{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        base_content_type, _junk \u003d parse_content_type("},{"line_number":1335,"context_line":"            resp_headers.get(\u0027Content-Type\u0027, \u0027\u0027))"},{"line_number":1336,"context_line":"        multipart \u003d (len([rs for rs in range_specs if rs[\u0027satisfiable\u0027]]) \u003e 1)"},{"line_number":1337,"context_line":"        # Multipart responses are not required to be in the same order as"},{"line_number":1338,"context_line":"        # the Range header; the parts may be in any order the server wants."},{"line_number":1339,"context_line":"        # Further, if multiple ranges are requested and only some are"}],"source_content_type":"text/x-python","patch_set":3,"id":"5afe65bd_ab594900","line":1336,"updated":"2015-06-03 16:22:15.000000000","message":"ok, this change fixes the single satisfiable issue","commit_id":"9d357d690cba111d39d2201b30a49c2b58d042f1"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4dd48ff927032be8f4303e267a96715b5a2d8b24","unresolved":false,"context_lines":[{"line_number":4896,"context_line":""},{"line_number":4897,"context_line":"    def test_multiple_parts(self):"},{"line_number":4898,"context_line":"        part1 \u003d \"two peanuts were walking down a railroad track\""},{"line_number":4899,"context_line":"        part2 \u003d \"and one was a salted. ... peanut.\""},{"line_number":4900,"context_line":""},{"line_number":4901,"context_line":"        doc_iters \u003d [{"},{"line_number":4902,"context_line":"            \u0027start_byte\u0027: 88,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_b5a04343","line":4899,"updated":"2015-05-29 16:49:30.000000000","message":"self.assertRaises(exceptions.humour.Groan, print(part1 + part2))","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4dd48ff927032be8f4303e267a96715b5a2d8b24","unresolved":false,"context_lines":[{"line_number":918,"context_line":"    def test_GET_simple_x_newest(self):"},{"line_number":919,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":920,"context_line":"                                              headers\u003d{\u0027X-Newest\u0027: \u0027true\u0027})"},{"line_number":921,"context_line":"        codes \u003d [200] * self.policy.ec_ndata"},{"line_number":922,"context_line":"        with set_http_connect(*codes):"},{"line_number":923,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":924,"context_line":"        self.assertEquals(resp.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_0b837657","line":921,"updated":"2015-05-29 16:49:30.000000000","message":"right, because now we are actually overriding x-newest for EC","commit_id":"02f2e6debbc8ccd1ea02eda0e27f431217e6740f"}]}
