)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"702a0a8818bea052045a862389caa8de81510056","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"69463a84_240e70ca","updated":"2026-07-02 19:59:32.000000000","message":"check experimental","commit_id":"10ee587761226383fdd3389ef94d650fdf309077"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"29b3c30b7da7a13ea4c2ea4067ad909c6177fbca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8021c8a1_1c93dde6","updated":"2026-07-07 01:13:13.000000000","message":"BTW, I got AI to go check the changelogs and see if any were missing that should be highlighted with:\n\n```\nCan you go review 995885, it\u0027s a changelog patch for an upstream release, so can you also check the git history to double check and make sure the highlight patches are mentioned?\n```\n\nWhich told me about the 2 I mentioned, so I then was lazy and asked:\n```\nCan you give me the example bullets you\u0027d add?\n```\n\nSo maybe we need a swift changelog skill ;)\nNOTE: mine already knows about what swift and gerrit is, which is why I could just give it a change number.","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3a1f642ab566f9f3dcc3619a5c582b14c4647faa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bd50b267_ba3ffc16","updated":"2026-07-07 01:08:21.000000000","message":"outside of the typo Jian saw, did we also want to include these 2 (see inline).","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b513cf9f12d0cad4acc7abbe5a5245d203e1c220","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4d71389d_b421dfdd","in_reply_to":"bd50b267_ba3ffc16","updated":"2026-07-07 01:38:52.000000000","message":"Thanks! I was debating about leaving them under\n\n\u003e Various other minor bug fixes and improvements.\n\nsince odds were good requests would already get rejected, but since you even provided suggestions...\n\nThanks again!","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"218a9bf2554d61cd829c7c64957245bda637b18d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"08473f27_bab12117","updated":"2026-07-07 04:52:55.000000000","message":"I want to rebase after https://review.opendev.org/c/openstack/swift/+/990515 merges so there\u0027s no merge commit, but aside from that, I think we\u0027re good.","commit_id":"27b2abf6c210ab6671e9df0ce408c404e477388c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"345752549bd2234f05cb6e70c8b85c599e7be630","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4588f2b9_4a741ee4","updated":"2026-07-07 13:43:19.000000000","message":"my Claude output is pasted below.\n\nbullets 1 and 6 are probably covered by \"minor fix\",\n2. is a fix within the release window so no need to flag,\n4, 5, and 7 are already covered AFAICT,\n\nleaving 3 which maybe already is sufficient??\n\n```\nBased on the full analysis, here\u0027s what the patch is missing:\n---\nMissing from the 995885 CHANGELOG\n\nS3 API section — 3 missing entries:\n\n1. Handle empty S3 multi-delete Quiet elements (a51443b2b) — empty \u003cQuiet/\u003e element caused AttributeError → 500 response (LP #2153519). Should be added under the S3 API fixes section.\n2. S3Request: reinstate timestamp property for sigv2 requests (d1612a11e) — sigv2 requests used the wrong timestamp property after the signing_timestamp deprecation, causing incorrect request signing behaviour. Probably a one-liner under S3 API fixes.\n3. s3api: 501 unsupported bucket subresources at other levels (1bdd10c28) — the existing \"Reject publicAccessBlock requests as not implemented\" entry only describes the bucket-level fix; this commit extends it to account-level and other subresources (torrent, cors, policy, etc.). The entry should be broadened.\n\nObject versioning section — 1 missing entry:\n\n4. versioning: use x-backend-timestamp as source version (8cc481de1) — when a PUT to a versioned container copies an existing unversioned object, the version name now retains full timestamp information including any offset. This is a correctness fix worth noting.\n\nNew section or general section — 2 missing entries:\n\n5. proxy_logging: use consistent labels for all statsd metrics (c161834f3) — statsd metric labels are now consistently derived from the client request path rather than swift.backend_path; affects the container label for S3 API requests and the policy label for container requests. Fixes LP #2138370/#2138371/#2138372. This is the most operator-visible change — people with dashboards built on these metrics will see label value changes.\n6. common/utils: fix LRUCache ghost-link corruption on expiry refresh (829439ed9) — ghost nodes left after cache expiry refresh could cause spurious eviction of live entries and eventual KeyError crashes (LP #2144614).\n\nOptional / lower priority:\n\n7. Object: log breakdown timings for slow DELETE requests (81fb83459 + 5a16b75b6) — new observability feature; slow DELETE requests now log per-phase timing breakdowns. Worth a brief mention for operators.\n```","commit_id":"27b2abf6c210ab6671e9df0ce408c404e477388c"}],"AUTHORS":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"345752549bd2234f05cb6e70c8b85c599e7be630","unresolved":true,"context_lines":[{"line_number":393,"context_line":"Russell Bryant (rbryant@redhat.com)"},{"line_number":394,"context_line":"Sachin Patil (psachin@redhat.com)"},{"line_number":395,"context_line":"Sam Morrison (sorrison@gmail.com)"},{"line_number":396,"context_line":"Samuel Merritt (sam@swiftstack.com)"},{"line_number":397,"context_line":"Sarafraj Singh (Sarafraj.Singh@intel.com)"},{"line_number":398,"context_line":"Sarvesh Ranjan (saranjan@cisco.com)"},{"line_number":399,"context_line":"Sascha Peilicke (saschpe@gmx.de)"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"268e8487_e18b05ba","side":"PARENT","line":396,"updated":"2026-07-07 13:43:19.000000000","message":"why are we dropping Sam?","commit_id":"cdae92c47cca4cc152a80e32ea7c70f39ccf6f7f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8dfe67409f4645d14952ccce97063f0bfa04324c","unresolved":true,"context_lines":[{"line_number":31,"context_line":"Janie Richling (jrichli@us.ibm.com)"},{"line_number":32,"context_line":"Michael Barton (mike@weirdlooking.com)"},{"line_number":33,"context_line":"Mahati Chamarthy (mahati.chamarthy@gmail.com)"},{"line_number":34,"context_line":"Samuel Merritt (smerritt@nvidia.com)"},{"line_number":35,"context_line":"Romain Le Disez (romain.ledisez@ovh.net)"},{"line_number":36,"context_line":"Pete Zaitcev (zaitcev@yahoo.com)"},{"line_number":37,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"754e0185_51a6594c","line":34,"updated":"2026-07-07 14:46:48.000000000","message":"he\u0027s still here, but the s8k address is wrong/invalid","commit_id":"27b2abf6c210ab6671e9df0ce408c404e477388c"}],"CHANGELOG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b513cf9f12d0cad4acc7abbe5a5245d203e1c220","unresolved":true,"context_lines":[{"line_number":48,"context_line":"      * Improved filtering of already-processed hashes."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    * Added a `--dev-id-bytes` argument to the `swift-ring-builder write_ring`"},{"line_number":51,"context_line":"      subcommand to allow operators to test rings with wide device IDs prior"},{"line_number":52,"context_line":"      to having more than 64k devices."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    * Allow operators to pass either raw or URL-quoted paths to"},{"line_number":55,"context_line":"      `swift-manage-shard-ranges show`. Notably, this better allows the tool"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"0e4e6924_ea4e067b","line":52,"range":{"start_line":51,"start_character":71,"end_line":52,"end_character":37},"updated":"2026-07-07 01:38:52.000000000","message":"\u003e while still having fewer than 64k devices\n\nmight be more clear?","commit_id":"10ee587761226383fdd3389ef94d650fdf309077"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3a1f642ab566f9f3dcc3619a5c582b14c4647faa","unresolved":true,"context_lines":[{"line_number":30,"context_line":"      * Fixed pagination of versioned listings with `NextVersionIdMarker`."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"      * Return `x-amz-server-side-encryption: AES256` header in GET and HEAD"},{"line_number":33,"context_line":"        responses when the object data is encrypted."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    * Object versioning fixes:"},{"line_number":36,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"7c8c8e07_5bc6d945","line":33,"updated":"2026-07-07 01:08:21.000000000","message":"f52988bb3 Reject oversized chunked S3 XML bodies?\n```\n* Reject oversized chunked S3 XML request bodies, such as multi-delete\n  and complete-multipart-upload requests, rather than parsing only the\n  allowed prefix.\n```","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"355d7bf5570f7a4794115d434df13bb18643d8da","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"      * Fixed listings with `?version-id-marker\u003dnull`."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"      * A PUT with `?version_id\u003dnull` now results in a 400, rather than 500,"},{"line_number":40,"context_line":"        response."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"      * Prepare for a future release with more complex version IDs."}],"source_content_type":"application/octet-stream","patch_set":3,"id":"03e53394_03142d66","line":39,"updated":"2026-07-06 22:37:47.000000000","message":"nit: actual query parameter is ``version-id``\n\nthe fix commit is titled \"versioning: fix 500 error for PUT with version-id\u003dnull\" (9efebcc6a)","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"b513cf9f12d0cad4acc7abbe5a5245d203e1c220","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"      * Fixed listings with `?version-id-marker\u003dnull`."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"      * A PUT with `?version_id\u003dnull` now results in a 400, rather than 500,"},{"line_number":40,"context_line":"        response."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"      * Prepare for a future release with more complex version IDs."}],"source_content_type":"application/octet-stream","patch_set":3,"id":"d9070bd4_6526f608","line":39,"in_reply_to":"03e53394_03142d66","updated":"2026-07-07 01:38:52.000000000","message":"Thanks for spotting that! I even was fixing it in a comment recently: https://review.opendev.org/c/openstack/swift/+/995879","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3a1f642ab566f9f3dcc3619a5c582b14c4647faa","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    * Improved ssync logging to always include remote address and path."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    * Improved consistency of proxy-logging metric labels."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    * Various other minor bug fixes and improvements."},{"line_number":84,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"e46a714f_ccb8ed7a","line":81,"updated":"2026-07-07 01:08:21.000000000","message":"04174022a Reject oversized chunked SLO manifests?\n\n```\n* Static large object manifests submitted with `Transfer-Encoding: chunked`\n  are now rejected when they exceed `max_manifest_size`, matching\n  fixed-length manifest uploads.\n```","commit_id":"3507f21faa2b2d69946268deecc46b49bdaa62d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"345752549bd2234f05cb6e70c8b85c599e7be630","unresolved":true,"context_lines":[{"line_number":43,"context_line":"      * A PUT with `?version-id\u003dnull` now results in a 400, rather than 500,"},{"line_number":44,"context_line":"        response."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"      * Prepare for a future release with more complex version IDs."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    * Object relinker fixes:"},{"line_number":49,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"df74e600_9730f331","line":46,"range":{"start_line":46,"start_character":37,"end_line":46,"end_character":42},"updated":"2026-07-07 13:43:19.000000000","message":"nit: s/with/that may use/\n\nthe with is ambiguous: the preparation is to introduce more complex ids in this release, vs. is the preparation for future releases that introduce more complex ids","commit_id":"27b2abf6c210ab6671e9df0ce408c404e477388c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8b50f4566a4c65d097e5dd7b6de19aef62a03bd9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"      * A PUT with `?version-id\u003dnull` now results in a 400, rather than 500,"},{"line_number":44,"context_line":"        response."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"      * Prepare for a future release with more complex version IDs."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    * Object relinker fixes:"},{"line_number":49,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"12621df6_429f954b","line":46,"range":{"start_line":46,"start_character":37,"end_line":46,"end_character":42},"in_reply_to":"df74e600_9730f331","updated":"2026-07-07 18:56:21.000000000","message":"Done","commit_id":"27b2abf6c210ab6671e9df0ce408c404e477388c"}]}
