)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"cf43cc393e0fc33549adf68b6c455e30278a16f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"37086ec0_9c4cb68d","updated":"2026-08-19 07:56:59.000000000","message":"I\u0027m fine with merging this patch as it is - this one fixes exactly the bug described in Launchpad.\n\nThat said, Nate\u0027s sq should be merged too - but maybe as a standalone commit, because it goes beyond the bug fix itself?","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"abcbe04b112c9137ba08c19c9466e3fd0de6a8dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"276b6948_52ace553","updated":"2026-08-19 00:07:02.000000000","message":"LGTM except I think we need to handle Swift3 along with S3API\nSee 1001445: sq? handle Swift3 with X-Backend-Etag-Is-At header | https://review.opendev.org/c/openstack/swift/+/1001445","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"b204c0fcff1ff27c223e15213c7adfbc83e8414b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"87dc8cb7_2bd3602e","in_reply_to":"37086ec0_9c4cb68d","updated":"2026-08-19 08:05:11.000000000","message":"... and now there is a follow up to Nates patch in 1001463: sq? handle Swift3 etag on object GET and HEAD too | https://review.opendev.org/c/openstack/swift/+/1001463","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"10be08e71703dd72f76460b03488ef2005744e7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"95120e1b_345df9a4","updated":"2026-08-19 14:38:00.000000000","message":"LGTM. Thanks!","commit_id":"e32bc963df516d6465912e5d2d6924925549c1da"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"6f46986195df319aa36dfcbf229388d9b1d415c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"18421744_1d3cecb6","updated":"2026-08-19 14:32:33.000000000","message":"Well - that push was wrong, but besides the commit date and committer nothing changed - sorry, my fault, wrong worktree directory.","commit_id":"e32bc963df516d6465912e5d2d6924925549c1da"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f96047582717e70847274daf42854b1ec60b5d25","unresolved":true,"context_lines":[{"line_number":1804,"context_line":"        headers.update(self._copy_source_headers())"},{"line_number":1805,"context_line":"        # note: we don\u0027t expect any existing x-backend-etag-is-at header value"},{"line_number":1806,"context_line":"        # on a PUT/COPY request"},{"line_number":1807,"context_line":"        headers[\u0027X-Backend-Etag-Is-At\u0027] \u003d sysmeta_header(\u0027object\u0027, \u0027etag\u0027)"},{"line_number":1808,"context_line":"        src_resp \u003d self.get_response(app, \u0027HEAD\u0027, src_bucket,"},{"line_number":1809,"context_line":"                                     swob.str_to_wsgi(src_obj),"},{"line_number":1810,"context_line":"                                     headers\u003dheaders, query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ebe8341_fe575164","line":1807,"range":{"start_line":1807,"start_character":8,"end_line":1807,"end_character":39},"updated":"2026-08-19 10:10:49.000000000","message":"I don\u0027t like that we have a helper function to do this and encapsulate the CSV format, but I can\u0027t use it here because it expects to be passed the request, and here we\u0027re building a set of transient headers rather than updating the actual client request.","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"abcbe04b112c9137ba08c19c9466e3fd0de6a8dd","unresolved":true,"context_lines":[{"line_number":1804,"context_line":"        headers.update(self._copy_source_headers())"},{"line_number":1805,"context_line":"        # note: we don\u0027t expect any existing x-backend-etag-is-at header value"},{"line_number":1806,"context_line":"        # on a PUT/COPY request"},{"line_number":1807,"context_line":"        headers[\u0027X-Backend-Etag-Is-At\u0027] \u003d sysmeta_header(\u0027object\u0027, \u0027etag\u0027)"},{"line_number":1808,"context_line":"        src_resp \u003d self.get_response(app, \u0027HEAD\u0027, src_bucket,"},{"line_number":1809,"context_line":"                                     swob.str_to_wsgi(src_obj),"},{"line_number":1810,"context_line":"                                     headers\u003dheaders, query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffbc9de5_b5bd276e","line":1807,"range":{"start_line":1807,"start_character":0,"end_line":1807,"end_character":74},"updated":"2026-08-19 00:07:02.000000000","message":"I think we need to handle the Swift3 headers too....","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f96047582717e70847274daf42854b1ec60b5d25","unresolved":false,"context_lines":[{"line_number":1804,"context_line":"        headers.update(self._copy_source_headers())"},{"line_number":1805,"context_line":"        # note: we don\u0027t expect any existing x-backend-etag-is-at header value"},{"line_number":1806,"context_line":"        # on a PUT/COPY request"},{"line_number":1807,"context_line":"        headers[\u0027X-Backend-Etag-Is-At\u0027] \u003d sysmeta_header(\u0027object\u0027, \u0027etag\u0027)"},{"line_number":1808,"context_line":"        src_resp \u003d self.get_response(app, \u0027HEAD\u0027, src_bucket,"},{"line_number":1809,"context_line":"                                     swob.str_to_wsgi(src_obj),"},{"line_number":1810,"context_line":"                                     headers\u003dheaders, query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4629353e_825137e1","line":1807,"range":{"start_line":1807,"start_character":0,"end_line":1807,"end_character":74},"in_reply_to":"ffbc9de5_b5bd276e","updated":"2026-08-19 10:10:49.000000000","message":"Done","commit_id":"24dcdd7e82ddc70f4bc555a51a59d6baa6193d16"}]}
