)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"8c5484bc344da700d47dff9b8cc3b535e6707595","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2d06701b_2f51af8b","updated":"2026-08-21 19:22:04.000000000","message":"This was pulled out from 991516: s3api: Checksum Persistence for Full Object Upload PUTs | https://review.opendev.org/c/openstack/swift/+/991516 to make it a little easier to track down where this new behavior was introduced","commit_id":"ad77155fa4cfba12cd4256b03ebb9209b3c836e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"727659b4278b402c4310608dd6446cb0fe77107f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a4ec16f6_29496a70","updated":"2026-08-25 10:13:44.000000000","message":"LGTM\n\nmore test coverage int his follow-up 1002249: object_versioning: test footer callbacks on overwrite | https://review.opendev.org/c/openstack/swift/+/1002249","commit_id":"89466815d5c2ab7dbd50f4d17acbb0307f7335a5"}],"swift/common/middleware/versioned_writes/object_versioning.py":[{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"cb9278d1de1ad4605ef8e374ba97c109b739d74f","unresolved":true,"context_lines":[{"line_number":401,"context_line":"        byte_counter \u003d ByteCountingReader(req.environ[\u0027wsgi.input\u0027])"},{"line_number":402,"context_line":"        put_req.environ[\u0027wsgi.input\u0027] \u003d byte_counter"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        footer_key \u003d \u0027swift.callback.update_footers\u0027"},{"line_number":405,"context_line":"        if footer_key in req.environ:"},{"line_number":406,"context_line":"            # Move the footer callback to the internal PUT that reads the"},{"line_number":407,"context_line":"            # client body. The original request is later reused to write the"},{"line_number":408,"context_line":"            # symlink to the actual object with versioning, and the"}],"source_content_type":"text/x-python","patch_set":2,"id":"46411b25_dc80c9a9","line":405,"range":{"start_line":404,"start_character":8,"end_line":405,"end_character":37},"updated":"2026-08-24 17:07:22.000000000","message":"nit: unless there\u0027s a linting/black issue I\u0027m not sure y this is its own var\ncompared to the immediately following `content_type_overridden` check","commit_id":"279cd016740fe84868770ae62ad8529f6e851cb8"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"64c572aa82366a0909f4244f4a4ad9978ddcccd0","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        byte_counter \u003d ByteCountingReader(req.environ[\u0027wsgi.input\u0027])"},{"line_number":402,"context_line":"        put_req.environ[\u0027wsgi.input\u0027] \u003d byte_counter"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        footer_key \u003d \u0027swift.callback.update_footers\u0027"},{"line_number":405,"context_line":"        if footer_key in req.environ:"},{"line_number":406,"context_line":"            # Move the footer callback to the internal PUT that reads the"},{"line_number":407,"context_line":"            # client body. The original request is later reused to write the"},{"line_number":408,"context_line":"            # symlink to the actual object with versioning, and the"}],"source_content_type":"text/x-python","patch_set":2,"id":"51916556_e1c41a10","line":405,"range":{"start_line":404,"start_character":8,"end_line":405,"end_character":37},"in_reply_to":"27263195_1150fc9c","updated":"2026-08-24 23:35:33.000000000","message":"Done","commit_id":"279cd016740fe84868770ae62ad8529f6e851cb8"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"2d80fe8ba3f308037a9a200a09242bd0a09f1e3d","unresolved":true,"context_lines":[{"line_number":401,"context_line":"        byte_counter \u003d ByteCountingReader(req.environ[\u0027wsgi.input\u0027])"},{"line_number":402,"context_line":"        put_req.environ[\u0027wsgi.input\u0027] \u003d byte_counter"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        footer_key \u003d \u0027swift.callback.update_footers\u0027"},{"line_number":405,"context_line":"        if footer_key in req.environ:"},{"line_number":406,"context_line":"            # Move the footer callback to the internal PUT that reads the"},{"line_number":407,"context_line":"            # client body. The original request is later reused to write the"},{"line_number":408,"context_line":"            # symlink to the actual object with versioning, and the"}],"source_content_type":"text/x-python","patch_set":2,"id":"27263195_1150fc9c","line":405,"range":{"start_line":404,"start_character":8,"end_line":405,"end_character":37},"in_reply_to":"46411b25_dc80c9a9","updated":"2026-08-24 23:24:45.000000000","message":"Hmmm good point, we should keep them consistent","commit_id":"279cd016740fe84868770ae62ad8529f6e851cb8"}]}
