)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"77935ad4ca045c92b8132e01a85e273e319dae82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"89fbbb71_29ebd144","updated":"2024-10-29 09:36:10.000000000","message":"merging this to reduce the length of dependent patches","commit_id":"ff5b399b4a179f3ba6f3c8fd85cf0286272d2eae"}],"swift/common/middleware/mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b42b894bedf2725377dac37181456fec7b2ba807","unresolved":true,"context_lines":[{"line_number":899,"context_line":"        resp.headers \u003d new_headers"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    def _handle_post_response(self, resp):"},{"line_number":902,"context_line":"        if resp.status_int !\u003d 307:"},{"line_number":903,"context_line":"            return resp"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        drain_and_close(resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"6621cb41_7b0c298f","line":902,"range":{"start_line":902,"start_character":30,"end_line":902,"end_character":33},"updated":"2024-10-18 16:12:22.000000000","message":"Use the `HTTP_TEMPORARY_REDIRECT` constant?","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2928b179560ce6b81ddd67ff39b61cc9f5b5c312","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        resp.headers \u003d new_headers"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    def _handle_post_response(self, resp):"},{"line_number":902,"context_line":"        if resp.status_int !\u003d 307:"},{"line_number":903,"context_line":"            return resp"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        drain_and_close(resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"32a09250_76034f6c","line":902,"range":{"start_line":902,"start_character":30,"end_line":902,"end_character":33},"in_reply_to":"6621cb41_7b0c298f","updated":"2024-10-18 17:05:24.000000000","message":"Done","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b42b894bedf2725377dac37181456fec7b2ba807","unresolved":true,"context_lines":[{"line_number":903,"context_line":"            return resp"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        drain_and_close(resp)"},{"line_number":906,"context_line":"        manifest_path \u003d wsgi_unquote(resp.headers.get(\u0027location\u0027))"},{"line_number":907,"context_line":"        marker_req \u003d self.make_subrequest("},{"line_number":908,"context_line":"            \u0027POST\u0027, path\u003dmanifest_path, headers\u003dself.req.headers)"},{"line_number":909,"context_line":"        sub_resp \u003d marker_req.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":2,"id":"452fcefb_024a8a5d","line":906,"updated":"2024-10-18 16:12:22.000000000","message":"OK, despite some test behaviors I saw when poking at things, symlink never provides a `Location` with the full URL, so we shouldn\u0027t need to parse this and extract just the path component or anything.\n\nBut isn\u0027t this going to follow *all* symlinks, even \"normal\" user-created ones? I was expecting some kind of check that we\u0027re looking at an MPU-written symlink...\n\nWhen we *are* working with an MPU-written symlink, we expect to be going from the user namespace to the null namespace, yeah? Ah, and `X-Backend-Allow-Reserved-Names` gets set down in `self.make_subrequest` 👍","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2928b179560ce6b81ddd67ff39b61cc9f5b5c312","unresolved":true,"context_lines":[{"line_number":903,"context_line":"            return resp"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        drain_and_close(resp)"},{"line_number":906,"context_line":"        manifest_path \u003d wsgi_unquote(resp.headers.get(\u0027location\u0027))"},{"line_number":907,"context_line":"        marker_req \u003d self.make_subrequest("},{"line_number":908,"context_line":"            \u0027POST\u0027, path\u003dmanifest_path, headers\u003dself.req.headers)"},{"line_number":909,"context_line":"        sub_resp \u003d marker_req.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f88e1f2e_1038ab3d","line":906,"in_reply_to":"452fcefb_024a8a5d","updated":"2024-10-18 17:05:24.000000000","message":"\u003e But isn\u0027t this going to follow all symlinks, even \"normal\" user-created ones? I was expecting some kind of check that we\u0027re looking at an MPU-written symlink...\n\nline 924: we only get here if there is an upload_id in the sysmeta. I\u0027ll add a test to verify that","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b42b894bedf2725377dac37181456fec7b2ba807","unresolved":true,"context_lines":[{"line_number":908,"context_line":"            \u0027POST\u0027, path\u003dmanifest_path, headers\u003dself.req.headers)"},{"line_number":909,"context_line":"        sub_resp \u003d marker_req.get_response(self.app)"},{"line_number":910,"context_line":"        drain_and_close(sub_resp)"},{"line_number":911,"context_line":"        if sub_resp.is_success:"},{"line_number":912,"context_line":"            new_resp \u003d HTTPAccepted(request\u003dself.req, headers\u003dsub_resp.headers)"},{"line_number":913,"context_line":"        else:"},{"line_number":914,"context_line":"            new_resp \u003d translate_error_response(sub_resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"22552a5b_e60fa5a7","line":911,"updated":"2024-10-18 16:12:22.000000000","message":"The expectation is that any successful sub-request would also be a 202, right? Can we just `return sub_resp`?","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2928b179560ce6b81ddd67ff39b61cc9f5b5c312","unresolved":true,"context_lines":[{"line_number":908,"context_line":"            \u0027POST\u0027, path\u003dmanifest_path, headers\u003dself.req.headers)"},{"line_number":909,"context_line":"        sub_resp \u003d marker_req.get_response(self.app)"},{"line_number":910,"context_line":"        drain_and_close(sub_resp)"},{"line_number":911,"context_line":"        if sub_resp.is_success:"},{"line_number":912,"context_line":"            new_resp \u003d HTTPAccepted(request\u003dself.req, headers\u003dsub_resp.headers)"},{"line_number":913,"context_line":"        else:"},{"line_number":914,"context_line":"            new_resp \u003d translate_error_response(sub_resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"362f5f9a_1882a899","line":911,"in_reply_to":"22552a5b_e60fa5a7","updated":"2024-10-18 17:05:24.000000000","message":"I\u0027m never sure I can trust what swob might be doing under the hood!\n\nIs it OK/necessary to write ``sub_resp.request \u003d self.request`` and then return sub_resp? I think I\u0027d also need to set ``sub_resp.environ \u003d self.req.environ``\n\nWhat I don\u0027t want is the sub_request environ leaking out.","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"}],"test/functional/test_mpu.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b42b894bedf2725377dac37181456fec7b2ba807","unresolved":true,"context_lines":[{"line_number":445,"context_line":"        }, resp.headers)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # update only metadata"},{"line_number":448,"context_line":"        post_headers \u003d {\u0027x-object-meta-test\u0027: \u0027three\u0027}"},{"line_number":449,"context_line":"        resp \u003d tf.retry(self._make_request, method\u003d\u0027POST\u0027,"},{"line_number":450,"context_line":"                        container\u003dself.user_cont, obj\u003dname,"},{"line_number":451,"context_line":"                        headers\u003dpost_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"94898f75_8115e5fb","line":448,"updated":"2024-10-18 16:12:22.000000000","message":"Might be an even stronger test if the user meta key changed, so we see the old key disappear and the new key persisting.","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2928b179560ce6b81ddd67ff39b61cc9f5b5c312","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        }, resp.headers)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # update only metadata"},{"line_number":448,"context_line":"        post_headers \u003d {\u0027x-object-meta-test\u0027: \u0027three\u0027}"},{"line_number":449,"context_line":"        resp \u003d tf.retry(self._make_request, method\u003d\u0027POST\u0027,"},{"line_number":450,"context_line":"                        container\u003dself.user_cont, obj\u003dname,"},{"line_number":451,"context_line":"                        headers\u003dpost_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"671121d6_9b80aaea","line":448,"in_reply_to":"94898f75_8115e5fb","updated":"2024-10-18 17:05:24.000000000","message":"Done","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"}],"test/unit/common/middleware/helpers.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b42b894bedf2725377dac37181456fec7b2ba807","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        conditional_etag \u003d resolve_etag_is_at_header(req, resp_spec.headers)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        # update the env passed by caller"},{"line_number":355,"context_line":"        resp_spec.update_environ(env)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if self.can_ignore_range:"},{"line_number":358,"context_line":"            # avoid popping range from original environ"}],"source_content_type":"text/x-python","patch_set":2,"id":"f1473c2d_15ce7dfe","line":355,"updated":"2024-10-18 16:12:22.000000000","message":"Why\u0027d this need to move? I suppose I ought to try backing it out and see what fails...","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2928b179560ce6b81ddd67ff39b61cc9f5b5c312","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        conditional_etag \u003d resolve_etag_is_at_header(req, resp_spec.headers)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        # update the env passed by caller"},{"line_number":355,"context_line":"        resp_spec.update_environ(env)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        if self.can_ignore_range:"},{"line_number":358,"context_line":"            # avoid popping range from original environ"}],"source_content_type":"text/x-python","patch_set":2,"id":"82000871_47970f3a","line":355,"in_reply_to":"f1473c2d_15ce7dfe","updated":"2024-10-18 17:05:24.000000000","message":"``\u0027swift.leave_relative_location\u0027`` is tested in make_iter at line 360 when the Response object is ``__call__``\u0027ed , *before* we were updating the environ\n\nThen...I noticed line 356 - the request that we actually use to build a response has a different environ!! But the significant environ is the one the *callers* passed in, so I think this is updating the right copy.","commit_id":"8963b5016f2a26e7cb3697f38beeaefa6723ee6a"}]}
