)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e48b472f6cd54e3a6c093d244a9429126629b3c","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                            # handled elsewhere"},{"line_number":904,"context_line":"                            start_byte, end_byte, length, headers, part \u003d next("},{"line_number":905,"context_line":"                                parts_iter[0])"},{"line_number":906,"context_line":"                        return (start_byte, end_byte, length, headers, part)"},{"line_number":907,"context_line":"                    except ChunkReadTimeout:"},{"line_number":908,"context_line":"                        new_source, new_node \u003d self._get_source_and_node()"},{"line_number":909,"context_line":"                        if new_source:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9abb7d3a_7c0fe436","line":906,"updated":"2016-06-01 19:54:10.000000000","message":"This \u0027part\u0027 here is the part_file that eventually ends up returning an incomplete read.  If he was wrapped such that he could raise a ChunkReadError if he stops getting chunks before returning all the expected bytes - then I think later we could handle ChunkReadError and ChunkReadTimeout the same way - fast-forward the backend range header for what we\u0027ve read so far - and request the rest of the bytes from the next node.","commit_id":"a3388bffe373cefe3c56ac7013e70317d31dcdc7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7e48b472f6cd54e3a6c093d244a9429126629b3c","unresolved":false,"context_lines":[{"line_number":995,"context_line":"                            # exception, so that client can exit gracefully with Internal Server Error."},{"line_number":996,"context_line":"                            if (content_length - buf) \u003e 0:"},{"line_number":997,"context_line":"                                self.app.logger.error(_(\u0027Incomplete bytes recieved from the source\u0027))"},{"line_number":998,"context_line":"                                raise"},{"line_number":999,"context_line":"                            break"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"                        if client_chunk_size is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9abb7d3a_7c61a404","line":998,"updated":"2016-06-01 19:54:10.000000000","message":"which exception do you suppose is getting re-raised here?  Where is content_length coming from?\n\nThis condition should trigger the same path as _get_source_and_node code path to resume the stream from another backend.\n\nI think the problem is that we expected the part_file.read to always raise a ChunkReadTimeout if we don\u0027t get enough bytes - but it can obviously also just get closed and return \u0027\u0027","commit_id":"a3388bffe373cefe3c56ac7013e70317d31dcdc7"}]}
