)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do not copy sysmeta"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It makes sense to copy user-meta, but sysmeta; I think it was just an"},{"line_number":10,"context_line":"accident left over form when we tried to support COPY in the"},{"line_number":11,"context_line":"proxy-server and middlewares wouldn\u0027t have had the chance to fix"},{"line_number":12,"context_line":"sysmeta."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"60c68fe9_a08c793c","line":9,"range":{"start_line":9,"start_character":23,"end_line":9,"end_character":32},"updated":"2023-09-13 14:42:37.000000000","message":"...and some other metadata, see https://review.opendev.org/c/openstack/swift/+/272724 and https://bugs.launchpad.net/swift/+bug/1391826","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do not copy sysmeta"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It makes sense to copy user-meta, but sysmeta; I think it was just an"},{"line_number":10,"context_line":"accident left over form when we tried to support COPY in the"},{"line_number":11,"context_line":"proxy-server and middlewares wouldn\u0027t have had the chance to fix"},{"line_number":12,"context_line":"sysmeta."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9ad30193_5c590d6f","line":9,"range":{"start_line":9,"start_character":34,"end_line":9,"end_character":45},"updated":"2023-09-13 14:42:37.000000000","message":"but NOT sysmeta","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Do not copy sysmeta"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It makes sense to copy user-meta, but sysmeta; I think it was just an"},{"line_number":10,"context_line":"accident left over form when we tried to support COPY in the"},{"line_number":11,"context_line":"proxy-server and middlewares wouldn\u0027t have had the chance to fix"},{"line_number":12,"context_line":"sysmeta."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6892f58a_396b2abf","line":10,"range":{"start_line":10,"start_character":19,"end_line":10,"end_character":23},"updated":"2023-09-13 14:42:37.000000000","message":"s/form/from/","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Do not copy sysmeta"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It makes sense to copy user-meta, but sysmeta; I think it was just an"},{"line_number":10,"context_line":"accident left over form when we tried to support COPY in the"},{"line_number":11,"context_line":"proxy-server and middlewares wouldn\u0027t have had the chance to fix"},{"line_number":12,"context_line":"sysmeta."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But that\u0027s a long since un-needed behavior and I think the fact that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a78dd7db_af281288","line":11,"range":{"start_line":10,"start_character":41,"end_line":11,"end_character":12},"updated":"2023-09-13 14:42:37.000000000","message":"yes, sysmeta copying was in the historic proxy server COPY handler https://review.opendev.org/c/openstack/swift/+/156923/41/swift/proxy/controllers/obj.py#b508\n\nRelated-Change: Ic96a92e938589a2f6add35a40741fd062f1c29eb","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84811c468f81ab9321f1127962185a2a11d736db","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Do not copy sysmeta"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It makes sense to copy user-meta, but sysmeta; I think it was just an"},{"line_number":10,"context_line":"accident left over form when we tried to support COPY in the"},{"line_number":11,"context_line":"proxy-server and middlewares wouldn\u0027t have had the chance to fix"},{"line_number":12,"context_line":"sysmeta."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"But that\u0027s a long since un-needed behavior and I think the fact that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"267bada5_928b7ac7","line":11,"range":{"start_line":10,"start_character":41,"end_line":11,"end_character":12},"in_reply_to":"a78dd7db_af281288","updated":"2023-09-13 14:44:10.000000000","message":"Also for reference the move of COPY out of proxy code into middleware\n\nRelated-Change: Ic96a92e938589a2f6add35a40741fd062f1c29eb","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"565bf5a5_c39e7d1f","updated":"2023-09-13 14:42:37.000000000","message":"The patch has gone further than just eliminating sysmeta from the COPY path, which explains (spot-checking) at least some of the test failures.","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"}],"swift/common/middleware/copy.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":363,"context_line":"            # x-fresh-metadata only applies to copy, not post-as-copy: ignore"},{"line_number":364,"context_line":"            # existing user metadata, update existing sysmeta with new"},{"line_number":365,"context_line":"            copy_header_subset(source_resp, sink_req, is_object_sysmeta)"},{"line_number":366,"context_line":"            copy_header_subset(req, sink_req, is_object_sysmeta)"},{"line_number":367,"context_line":"        else:"},{"line_number":368,"context_line":"            # First copy existing sysmeta, user meta and other headers from the"},{"line_number":369,"context_line":"            # source to the sink, apart from headers that are conditionally"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b845afd_c8e3cb23","side":"PARENT","line":366,"updated":"2023-09-13 14:42:37.000000000","message":"ok, so if we no longer copy any sysmeta from the source to sink_req, then we no longer need to update the sink_req with sysmeta from the req, because the sink_req already has the req\u0027s sysmeta.","commit_id":"e2dca715038ddcda072841b413db73569494c31c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":372,"context_line":"                               \u0027etag\u0027, \u0027content-type\u0027, \u0027x-timestamp\u0027,"},{"line_number":373,"context_line":"                               \u0027x-backend-timestamp\u0027)"},{"line_number":374,"context_line":"            copy_header_subset(source_resp, sink_req,"},{"line_number":375,"context_line":"                               lambda k: k.lower() not in exclude_headers)"},{"line_number":376,"context_line":"            # now update with original req headers"},{"line_number":377,"context_line":"            sink_req.headers.update(req.headers)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5284157a_d3b806c9","side":"PARENT","line":375,"updated":"2023-09-13 14:42:37.000000000","message":"maybe the fix is to add sysmeta to the exclusion condition?","commit_id":"e2dca715038ddcda072841b413db73569494c31c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        is_object_user_meta \u003d functools.partial(is_user_meta, \u0027object\u0027)"},{"line_number":373,"context_line":"        if not config_true_value(req.headers.get(\u0027x-fresh-metadata\u0027, \u0027false\u0027)):"},{"line_number":374,"context_line":"            # by default we preserve user-sysmeta across a COPY, but users can"},{"line_number":375,"context_line":"            # opt-out with x-fresh-metadata\u003dtrue"},{"line_number":376,"context_line":"            copy_header_subset(source_resp, sink_req, is_object_user_meta)"},{"line_number":377,"context_line":"        # we always set/override any user-meta the client sends with the COPY"}],"source_content_type":"text/x-python","patch_set":1,"id":"c363a0e7_69474d20","line":374,"range":{"start_line":374,"start_character":37,"end_line":374,"end_character":49},"updated":"2023-09-13 14:42:37.000000000","message":"user-meta","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4926d2fb1ff6385f1740e625c1e54f7947165c13","unresolved":true,"context_lines":[{"line_number":373,"context_line":"        if not config_true_value(req.headers.get(\u0027x-fresh-metadata\u0027, \u0027false\u0027)):"},{"line_number":374,"context_line":"            # by default we preserve user-sysmeta across a COPY, but users can"},{"line_number":375,"context_line":"            # opt-out with x-fresh-metadata\u003dtrue"},{"line_number":376,"context_line":"            copy_header_subset(source_resp, sink_req, is_object_user_meta)"},{"line_number":377,"context_line":"        # we always set/override any user-meta the client sends with the COPY"},{"line_number":378,"context_line":"        copy_header_subset(req, sink_req, is_object_user_meta)"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6ab86967_10e33bed","line":376,"updated":"2023-09-13 14:42:37.000000000","message":"IIUC this change is a regression to bug https://bugs.launchpad.net/swift/+bug/1391826 which was fixed by https://review.opendev.org/c/openstack/swift/+/272724 (Related-Change: I917fb0b4e831c13e04ade1c5e0b9821802dec967). That fix was to ensure that *all* headers were copied from source to sink *except* exclude_headers. Here we\u0027re now only copying user meta headers, so we lose Content-Encoding for example:\n\n```\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d FAILURES \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n_______ TestServerSideCopyMiddleware.test_COPY_source_headers_no_updates _______\n\nself \u003d \u003ctest.unit.common.middleware.test_copy.TestServerSideCopyMiddleware testMethod\u003dtest_COPY_source_headers_no_updates\u003e\n\n    def test_COPY_source_headers_no_updates(self):\n        # copy should preserve existing metadata if not updated\n        req_headers \u003d self._test_COPY_source_headers({})\n        self.assertEqual(\u0027text/original\u0027, req_headers.get(\u0027Content-Type\u0027))\n\u003e       self.assertEqual(\u0027gzip\u0027, req_headers.get(\u0027Content-Encoding\u0027))\n\ntest_copy.py:1200: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pycharm/teamcity/diff_tools.py:33: in _patched_equals\n    old(self, first, second, msg)\nE   AssertionError: \u0027gzip\u0027 !\u003d None\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d short test summary info \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAILED test_copy.py::TestServerSideCopyMiddleware::test_COPY_source_headers_no_updates\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 1 failed in 0.46s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"4994f5ec722b22463d06f81571ea8287d84388a6"}]}
