)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"dbf5d5267c52cb9a975b1b5e9f4b939a60e9e8dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"151aceeb_e24c8f0e","updated":"2026-08-24 14:24:50.000000000","message":"I like the thought that SLO does its own clean up. I\u0027m not sure what that should exactly look like. The propagation of request environs is a little mind-bending.","commit_id":"afbc3c6f9ecdecace34f9456e647d04a5d44de76"}],"swift/common/middleware/copy.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"dbf5d5267c52cb9a975b1b5e9f4b939a60e9e8dd","unresolved":true,"context_lines":[{"line_number":551,"context_line":"        # environ. Let both inspect or modify the PUT that receives the source"},{"line_number":552,"context_line":"        # response body, with the source hook first."},{"line_number":553,"context_line":"        copy_source_hooks \u003d ("},{"line_number":554,"context_line":"            source_resp.environ.get(\u0027swift.callback.copy_source_hook\u0027),"},{"line_number":555,"context_line":"            sink_req.environ.get(\u0027swift.callback.copy_source_hook\u0027),"},{"line_number":556,"context_line":"        )"},{"line_number":557,"context_line":"        if any(copy_source_hooks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c3a55706_30325ffe","line":554,"updated":"2026-08-24 14:24:50.000000000","message":"IIUC this works because:\n\n* copy mw makes a new subrequest for the source GET, which does NOT inherit the s3api request environ.\n\n* swob.Request.get_response() called by copy mw passes the subreq to the swob.Response instance, so source_resp.environ  IS subreq environ\n\n* SLO gets the subreq, installs its copy_hook in the *request* environ, which makes it visible to copy mw source_resp.\n\nI wonder if it would be clearer if the source *request* environ was available here, just to avoid having to understand that the source_resp environ happens to be the same thing.\n\nBut I also wonder if it\u0027s all moot if there\u0027s no reason for SLO to ever expose its sysmeta to leftwards middlewares.","commit_id":"afbc3c6f9ecdecace34f9456e647d04a5d44de76"}],"swift/common/middleware/slo.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"dbf5d5267c52cb9a975b1b5e9f4b939a60e9e8dd","unresolved":true,"context_lines":[{"line_number":1886,"context_line":"        try:"},{"line_number":1887,"context_line":"            if (req.method in (\u0027GET\u0027, \u0027HEAD\u0027) and"},{"line_number":1888,"context_line":"                    req.environ.get(\u0027swift.source\u0027) \u003d\u003d \u0027SSC\u0027):"},{"line_number":1889,"context_line":"                install_copy_hook(req.environ)"},{"line_number":1890,"context_line":"            if req.method \u003d\u003d \u0027PUT\u0027 and \\"},{"line_number":1891,"context_line":"                    req.params.get(\u0027multipart-manifest\u0027) \u003d\u003d \u0027put\u0027:"},{"line_number":1892,"context_line":"                return self.handle_multipart_put(req, start_response)"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d08d8d4_10fc73dd","line":1889,"updated":"2026-08-24 14:24:50.000000000","message":"do we ever want slo to leak its symeta in GET/HEAD? could we just have it purge all responses of slo sysmeta?","commit_id":"afbc3c6f9ecdecace34f9456e647d04a5d44de76"}],"test/probe/test_s3api_copy_sysmeta.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ac94cd36d73b2130404599366e13e435cbbe3aac","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        source \u003d self._make_name(\u0027swift-slo-source-\u0027).decode()"},{"line_number":155,"context_line":"        destination \u003d self._make_name(\u0027swift-slo-copy-\u0027).decode()"},{"line_number":156,"context_line":"        self._make_swift_slo(source)"},{"line_number":157,"context_line":"        source_headers \u003d self._assert_source_has_slo_sysmeta("},{"line_number":158,"context_line":"            source)"},{"line_number":159,"context_line":"        self._swift_copy(source, destination)"},{"line_number":160,"context_line":"        swift_copy_headers \u003d self.internal_client.get_object_metadata("}],"source_content_type":"text/x-python","patch_set":1,"id":"1d50239d_1c34045b","line":157,"updated":"2026-08-22 01:07:59.000000000","message":"pep8: F841 local variable \u0027source_headers\u0027 is assigned to but never used","commit_id":"e1ef370a864c5c60dcb8acb97a9560c3e39f576c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ac94cd36d73b2130404599366e13e435cbbe3aac","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        source \u003d self._make_name(\u0027mpu-source-\u0027).decode()"},{"line_number":193,"context_line":"        destination \u003d self._make_name(\u0027mpu-copy-\u0027).decode()"},{"line_number":194,"context_line":"        self._make_s3_mpu(source)"},{"line_number":195,"context_line":"        source_headers \u003d self._assert_source_is_s3_mpu(source)"},{"line_number":196,"context_line":"        self._swift_copy(source, destination)"},{"line_number":197,"context_line":"        copy_headers \u003d self.internal_client.get_object_metadata("},{"line_number":198,"context_line":"            self.account, self.container, destination)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c56fdf2_9d75c54b","line":195,"updated":"2026-08-22 01:07:59.000000000","message":"pep8: F841 local variable \u0027source_headers\u0027 is assigned to but never used","commit_id":"e1ef370a864c5c60dcb8acb97a9560c3e39f576c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"acb2e57f9588ef34f1d9d2fcf7d68a75b699340f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        source \u003d self._make_name(\u0027swift-slo-source-\u0027).decode()"},{"line_number":123,"context_line":"        destination \u003d self._make_name(\u0027swift-slo-copy-\u0027).decode()"},{"line_number":124,"context_line":"        self._make_swift_slo(source)"},{"line_number":125,"context_line":"        source_headers \u003d self._assert_source_has_slo_sysmeta("},{"line_number":126,"context_line":"            source)"},{"line_number":127,"context_line":"        self._swift_copy(source, destination)"},{"line_number":128,"context_line":"        swift_copy_headers \u003d self.internal_client.get_object_metadata("}],"source_content_type":"text/x-python","patch_set":2,"id":"dcf2a207_86f4fe14","line":125,"updated":"2026-08-22 04:27:13.000000000","message":"pep8: F841 local variable \u0027source_headers\u0027 is assigned to but never used","commit_id":"afbc3c6f9ecdecace34f9456e647d04a5d44de76"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"acb2e57f9588ef34f1d9d2fcf7d68a75b699340f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        source \u003d self._make_name(\u0027mpu-source-\u0027).decode()"},{"line_number":161,"context_line":"        destination \u003d self._make_name(\u0027mpu-copy-\u0027).decode()"},{"line_number":162,"context_line":"        self._make_s3_mpu(source)"},{"line_number":163,"context_line":"        source_headers \u003d self._assert_source_is_s3_mpu(source)"},{"line_number":164,"context_line":"        self._swift_copy(source, destination)"},{"line_number":165,"context_line":"        copy_headers \u003d self.internal_client.get_object_metadata("},{"line_number":166,"context_line":"            self.account, self.container, destination)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3126d638_e14cfbd2","line":163,"updated":"2026-08-22 04:27:13.000000000","message":"pep8: F841 local variable \u0027source_headers\u0027 is assigned to but never used","commit_id":"afbc3c6f9ecdecace34f9456e647d04a5d44de76"}]}
