)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25eca6b2c52d6dd415e3bf67d4473660be8c9cf5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f38ac004_4d5eed0a","updated":"2023-07-24 14:11:41.000000000","message":"I guess in fairness this said it was only a start, and only Object GET path","commit_id":"5b2c846c69cba6dc707ff32318b715791711f34e"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e7c99e970ef80dffb7206e6d6c3c1db1969cac5c","unresolved":false,"context_lines":[{"line_number":1409,"context_line":"                \u0027x-object-sysmeta-ec-etag\u0027, src_headers.get(\u0027etag\u0027, \u0027\u0027)))"},{"line_number":1410,"context_line":"            self.node \u003d node"},{"line_number":1411,"context_line":"            return source, node"},{"line_number":1412,"context_line":"        return None, None"},{"line_number":1413,"context_line":""},{"line_number":1414,"context_line":"    def _make_app_iter(self, req, node, source):"},{"line_number":1415,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_995f500d","line":1412,"updated":"2020-06-19 04:30:34.000000000","message":"Right, so this is where our ECFragGetter should cut out; we just duplicate everything through here:\n\n $ diff \u003c( \u003c swift/proxy/controllers/base.py sed \u0027858,1412!d\u0027 ) \u003c( \u003c swift/proxy/controllers/obj.py sed \u00272239,2793!d\u0027 )\n 1c1\n \u003c class GetOrHeadHandler(object):\n ---\n \u003e class ECFragGetter(object):\n 235c235\n \u003c                         exc_type, exc_value, exc_traceback \u003d exc_info()\n ---\n \u003e                         exc_type, exc_value, exc_traceback \u003d sys.exc_info()\n\nSeems to be in order.","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e7c99e970ef80dffb7206e6d6c3c1db1969cac5c","unresolved":false,"context_lines":[{"line_number":2037,"context_line":"        associated with the same frag_index then only one is included."},{"line_number":2038,"context_line":""},{"line_number":2039,"context_line":"        :return: a list of sources, each source being a tuple of form"},{"line_number":2040,"context_line":"                (ResumingGetter, iter)"},{"line_number":2041,"context_line":"        \"\"\""},{"line_number":2042,"context_line":"        all_sources \u003d []"},{"line_number":2043,"context_line":"        for frag_index, sources in self.gets.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_590e5832","line":2040,"range":{"start_line":2040,"start_character":17,"end_line":2040,"end_character":31},"updated":"2020-06-19 04:30:34.000000000","message":"ECFragGetter now, yeah?","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5f7ab38ff808308dac3c570c22bbf55551e271e6","unresolved":false,"context_lines":[{"line_number":2037,"context_line":"        associated with the same frag_index then only one is included."},{"line_number":2038,"context_line":""},{"line_number":2039,"context_line":"        :return: a list of sources, each source being a tuple of form"},{"line_number":2040,"context_line":"                (ResumingGetter, iter)"},{"line_number":2041,"context_line":"        \"\"\""},{"line_number":2042,"context_line":"        all_sources \u003d []"},{"line_number":2043,"context_line":"        for frag_index, sources in self.gets.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_895530c9","line":2040,"range":{"start_line":2040,"start_character":17,"end_line":2040,"end_character":31},"in_reply_to":"bf51134e_590e5832","updated":"2020-08-05 15:26:13.000000000","message":"Done","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e7c99e970ef80dffb7206e6d6c3c1db1969cac5c","unresolved":false,"context_lines":[{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"class ECGetResponseCollection(object):"},{"line_number":2077,"context_line":"    \"\"\""},{"line_number":2078,"context_line":"    Manages all successful EC GET responses gathered by ResumingGetters."},{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"    A response comprises a tuple of (\u003cgetter instance\u003e, \u003cparts iterator\u003e). All"},{"line_number":2081,"context_line":"    responses having the same data timestamp are placed in an"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_79135c5d","line":2078,"range":{"start_line":2078,"start_character":56,"end_line":2078,"end_character":71},"updated":"2020-06-19 04:30:34.000000000","message":"And here.","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5f7ab38ff808308dac3c570c22bbf55551e271e6","unresolved":false,"context_lines":[{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":"class ECGetResponseCollection(object):"},{"line_number":2077,"context_line":"    \"\"\""},{"line_number":2078,"context_line":"    Manages all successful EC GET responses gathered by ResumingGetters."},{"line_number":2079,"context_line":""},{"line_number":2080,"context_line":"    A response comprises a tuple of (\u003cgetter instance\u003e, \u003cparts iterator\u003e). All"},{"line_number":2081,"context_line":"    responses having the same data timestamp are placed in an"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_69509cd5","line":2078,"range":{"start_line":2078,"start_character":56,"end_line":2078,"end_character":71},"in_reply_to":"bf51134e_79135c5d","updated":"2020-08-05 15:26:13.000000000","message":"Done","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e7c99e970ef80dffb7206e6d6c3c1db1969cac5c","unresolved":false,"context_lines":[{"line_number":2106,"context_line":"        Add a response to the collection."},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        :param get: An instance of"},{"line_number":2109,"context_line":"                    :class:`~swift.proxy.controllers.base.ResumingGetter`"},{"line_number":2110,"context_line":"        :param parts_iter: An iterator over response body parts"},{"line_number":2111,"context_line":"        :raises ValueError: if the response etag or status code values do not"},{"line_number":2112,"context_line":"            match any values previously received for the same timestamp"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_b91df467","line":2109,"range":{"start_line":2109,"start_character":58,"end_line":2109,"end_character":72},"updated":"2020-06-19 04:30:34.000000000","message":"Here, too. I\u0027m a little surprised the doc build didn\u0027t catch this one. :-/","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"5f7ab38ff808308dac3c570c22bbf55551e271e6","unresolved":false,"context_lines":[{"line_number":2106,"context_line":"        Add a response to the collection."},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        :param get: An instance of"},{"line_number":2109,"context_line":"                    :class:`~swift.proxy.controllers.base.ResumingGetter`"},{"line_number":2110,"context_line":"        :param parts_iter: An iterator over response body parts"},{"line_number":2111,"context_line":"        :raises ValueError: if the response etag or status code values do not"},{"line_number":2112,"context_line":"            match any values previously received for the same timestamp"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_095be0f6","line":2109,"range":{"start_line":2109,"start_character":58,"end_line":2109,"end_character":72},"in_reply_to":"bf51134e_b91df467","updated":"2020-08-05 15:26:13.000000000","message":"Done","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e7c99e970ef80dffb7206e6d6c3c1db1969cac5c","unresolved":false,"context_lines":[{"line_number":2890,"context_line":"        # nodes contain different fragments. Also EC has implemented it\u0027s"},{"line_number":2891,"context_line":"        # own specific implementation of concurrent gets to ec_ndata nodes."},{"line_number":2892,"context_line":"        # So we don\u0027t need to  worry about plumbing and sending a"},{"line_number":2893,"context_line":"        # concurrency value to ResumingGetter."},{"line_number":2894,"context_line":"        with ContextPool(policy.ec_ndata) as pool:"},{"line_number":2895,"context_line":"            pile \u003d GreenAsyncPile(pool)"},{"line_number":2896,"context_line":"            buckets \u003d ECGetResponseCollection(policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_f9280c87","line":2893,"range":{"start_line":2893,"start_character":31,"end_line":2893,"end_character":45},"updated":"2020-06-19 04:30:34.000000000","message":"And finally, here.","commit_id":"ffda7b149fb53ce88b6c92aad8f66b558967fbc6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"25eca6b2c52d6dd415e3bf67d4473660be8c9cf5","unresolved":true,"context_lines":[{"line_number":2874,"context_line":"            concurrency \u003d policy.ec_ndata if self.app.concurrent_gets else 1"},{"line_number":2875,"context_line":"            resp \u003d self.GETorHEAD_base("},{"line_number":2876,"context_line":"                req, _(\u0027Object\u0027), node_iter, partition,"},{"line_number":2877,"context_line":"                req.swift_entity_path, concurrency)"},{"line_number":2878,"context_line":"            self._fix_response(req, resp)"},{"line_number":2879,"context_line":"            return resp"},{"line_number":2880,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"4ed00f33_11beae01","line":2877,"updated":"2023-07-24 14:11:41.000000000","message":"yup, HEAD was left to re-use replicated request path","commit_id":"5b2c846c69cba6dc707ff32318b715791711f34e"}]}
