)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"change_message_id":"ea3345e8e43b60389c13241cfab6b853c3224ebe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"cb8f2409_fb6fc27d","updated":"2026-07-30 13:43:57.000000000","message":"Clean, well-structured patch. Great test coverage.","commit_id":"a27f689822040efb8acdbb80db1e16ad05a0eebc"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f61cd2ca8c55230df57eabdbec9785e50233e701","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":64,"id":"84e1e349_2a901073","updated":"2026-08-07 15:03:09.000000000","message":"Please see my inline comments","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"}],"etc/proxy-server.conf-sample":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f61cd2ca8c55230df57eabdbec9785e50233e701","unresolved":true,"context_lines":[{"line_number":749,"context_line":"#"},{"line_number":750,"context_line":"# Comma-separated list of checksum algorithms enabled for S3 API checksum"},{"line_number":751,"context_line":"# headers and checksum trailers. Leave unset to enable crc32, crc32c,"},{"line_number":752,"context_line":"# crc64nvme, sha1, and sha256. Set to an empty value to disable all checksum"},{"line_number":753,"context_line":"# algorithms."},{"line_number":754,"context_line":"# allowed_checksum_algorithms \u003d"},{"line_number":755,"context_line":"#"}],"source_content_type":"application/octet-stream","patch_set":64,"id":"f0110de0_c3dff70d","line":752,"updated":"2026-08-07 15:03:09.000000000","message":"I think this line needs an update as well","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"9e1af1bf92b0bb100350c993caaf391fe6513ae7","unresolved":false,"context_lines":[{"line_number":749,"context_line":"#"},{"line_number":750,"context_line":"# Comma-separated list of checksum algorithms enabled for S3 API checksum"},{"line_number":751,"context_line":"# headers and checksum trailers. Leave unset to enable crc32, crc32c,"},{"line_number":752,"context_line":"# crc64nvme, sha1, and sha256. Set to an empty value to disable all checksum"},{"line_number":753,"context_line":"# algorithms."},{"line_number":754,"context_line":"# allowed_checksum_algorithms \u003d"},{"line_number":755,"context_line":"#"}],"source_content_type":"application/octet-stream","patch_set":64,"id":"d2e0062a_abb92aa6","line":752,"in_reply_to":"f0110de0_c3dff70d","updated":"2026-08-07 21:34:40.000000000","message":"Acknowledged","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f61cd2ca8c55230df57eabdbec9785e50233e701","unresolved":true,"context_lines":[{"line_number":758,"context_line":"# to CopyObject requests whose source has no stored checksum algorithm."},{"line_number":759,"context_line":"# Leave unset to disable default checksums. Valid values are crc32, crc32c,"},{"line_number":760,"context_line":"# crc64nvme, md5, sha1, sha256, and sha512."},{"line_number":761,"context_line":"# default_checksum_algorithm \u003d"},{"line_number":762,"context_line":"#"},{"line_number":763,"context_line":"# AWS allows clock skew up to 15 mins; note that older versions of swift/swift3"},{"line_number":764,"context_line":"# allowed at most 5 mins."}],"source_content_type":"application/octet-stream","patch_set":64,"id":"2512f879_0c58fa71","line":761,"updated":"2026-08-07 15:03:09.000000000","message":"If I set this to sha512 the proxy fails to start with:\n\n```ValueError: Invalid default_checksum_algorithm \u0027SHA512\u0027: must be one of allowed_checksum_algorithms: CRC32, CRC32C, CRC64NVME, SHA1, SHA256\n```","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"9e1af1bf92b0bb100350c993caaf391fe6513ae7","unresolved":false,"context_lines":[{"line_number":758,"context_line":"# to CopyObject requests whose source has no stored checksum algorithm."},{"line_number":759,"context_line":"# Leave unset to disable default checksums. Valid values are crc32, crc32c,"},{"line_number":760,"context_line":"# crc64nvme, md5, sha1, sha256, and sha512."},{"line_number":761,"context_line":"# default_checksum_algorithm \u003d"},{"line_number":762,"context_line":"#"},{"line_number":763,"context_line":"# AWS allows clock skew up to 15 mins; note that older versions of swift/swift3"},{"line_number":764,"context_line":"# allowed at most 5 mins."}],"source_content_type":"application/octet-stream","patch_set":64,"id":"502a8196_73aad5f9","line":761,"in_reply_to":"2512f879_0c58fa71","updated":"2026-08-07 21:34:40.000000000","message":"Thinking of blockikng non-crc algorithms\nhttps://review.opendev.org/c/openstack/swift/+/994518/comment/d9685865_f1d6b408/","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f3c37a227ac9ecc6b60298f551885d80d30814ee","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \u0027x-amz-checksum-md5\u0027: md5,"},{"line_number":108,"context_line":"    \u0027x-amz-checksum-sha1\u0027: sha1,"},{"line_number":109,"context_line":"    \u0027x-amz-checksum-sha256\u0027: sha256,"},{"line_number":110,"context_line":"    \u0027x-amz-checksum-sha512\u0027: sha512,"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    # Known algorithms, but not supported by Swift."},{"line_number":113,"context_line":"    \u0027x-amz-checksum-xxhash128\u0027: _unsupported_checksum_hasher,"}],"source_content_type":"text/x-python","patch_set":2,"id":"737a5c24_17f8a5e4","line":110,"updated":"2026-06-23 20:35:19.000000000","message":"pep8: F821 undefined name \u0027sha512\u0027","commit_id":"32037a972663fb35ba32edb6d532b1ca7045668c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c541d2b1ed9d9f88615f2bf1ad7c11ca8feffa6","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \u0027x-amz-checksum-md5\u0027: md5,"},{"line_number":108,"context_line":"    \u0027x-amz-checksum-sha1\u0027: sha1,"},{"line_number":109,"context_line":"    \u0027x-amz-checksum-sha256\u0027: sha256,"},{"line_number":110,"context_line":"    \u0027x-amz-checksum-sha512\u0027: sha512,"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    # Known algorithms, but not supported by Swift."},{"line_number":113,"context_line":"    \u0027x-amz-checksum-xxhash128\u0027: _unsupported_checksum_hasher,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c1b08d05_3da16fd7","line":110,"updated":"2026-06-23 23:35:48.000000000","message":"pep8: F821 undefined name \u0027sha512\u0027","commit_id":"224de5e667aa6c610fafeb10fd3ea87719502478"}],"swift/common/middleware/s3api/utils.py":[{"author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"change_message_id":"ea3345e8e43b60389c13241cfab6b853c3224ebe","unresolved":true,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"def classify_checksum_header_value(value):"},{"line_number":174,"context_line":"    if is_valid_hash(value):"},{"line_number":175,"context_line":"        if len(value) in (8, 16, 20, 32, 64, 128, 256, 512):"},{"line_number":176,"context_line":"            return \u0027hash_%d\u0027 % len(value)"},{"line_number":177,"context_line":"    elif is_valid_base64(value):"},{"line_number":178,"context_line":"        # crc32 -\u003e b64_8"}],"source_content_type":"text/x-python","patch_set":57,"id":"e4a0b28f_acb0edcc","line":175,"updated":"2026-07-30 13:43:57.000000000","message":"SHA-512 produces a 64-byte digest which encodes to 88 base64 characters\n\nSuggestion: add 88 to the set and a comment # sha512 -\u003e b64_88","commit_id":"a27f689822040efb8acdbb80db1e16ad05a0eebc"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"63799dda87c375f2b08248c15c47ac93dd15abfe","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"def classify_checksum_header_value(value):"},{"line_number":174,"context_line":"    if is_valid_hash(value):"},{"line_number":175,"context_line":"        if len(value) in (8, 16, 20, 32, 64, 128, 256, 512):"},{"line_number":176,"context_line":"            return \u0027hash_%d\u0027 % len(value)"},{"line_number":177,"context_line":"    elif is_valid_base64(value):"},{"line_number":178,"context_line":"        # crc32 -\u003e b64_8"}],"source_content_type":"text/x-python","patch_set":57,"id":"9a9c144a_5ca6c9fd","line":175,"in_reply_to":"e4a0b28f_acb0edcc","updated":"2026-07-30 21:41:02.000000000","message":"Good catch! I will add, thanks!","commit_id":"a27f689822040efb8acdbb80db1e16ad05a0eebc"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f61cd2ca8c55230df57eabdbec9785e50233e701","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"MULTIUPLOAD_SUFFIX \u003d \u0027+segments\u0027"},{"line_number":31,"context_line":"DEFAULT_ALLOWED_CHECKSUM_ALGORITHMS \u003d ("},{"line_number":32,"context_line":"    \u0027CRC32\u0027, \u0027CRC32C\u0027, \u0027CRC64NVME\u0027, \u0027SHA1\u0027, \u0027SHA256\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def sysmeta_prefix(resource):"}],"source_content_type":"text/x-python","patch_set":64,"id":"d9685865_f1d6b408","line":32,"updated":"2026-08-07 15:03:09.000000000","message":"This needs `SHA512` as well, otherwise the proxy won\u0027t start when using `default_checksum_algorithm \u003d sha512`","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"nmartes@NVIDIA.com","username":"nmartes"},"change_message_id":"9e1af1bf92b0bb100350c993caaf391fe6513ae7","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"MULTIUPLOAD_SUFFIX \u003d \u0027+segments\u0027"},{"line_number":31,"context_line":"DEFAULT_ALLOWED_CHECKSUM_ALGORITHMS \u003d ("},{"line_number":32,"context_line":"    \u0027CRC32\u0027, \u0027CRC32C\u0027, \u0027CRC64NVME\u0027, \u0027SHA1\u0027, \u0027SHA256\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def sysmeta_prefix(resource):"}],"source_content_type":"text/x-python","patch_set":64,"id":"d0c2a65d_c49f168a","line":32,"in_reply_to":"d9685865_f1d6b408","updated":"2026-08-07 21:34:40.000000000","message":"Hmmmmmm this is a good catch, but it raising another question I was thinking about in default checksum algorithms. I think default can really only be CRC algorithms, for the main reason of MPUs. S3 by default includes CRC64NVME as the checksum algorithm for a MPU. If we allow operators to set the default checksum to one that is not a CRC, then Swift won\u0027t be able to make a full object checksum, which will kinda break things.\n\nWhy would anyone want a composite checksum (like SHA512) over a full object one like CRC when it comes to integrity... I think I\u0027ll go ahead and update 994571: s3api: Add Default Checksum Algorithm Configuration | https://review.opendev.org/c/openstack/swift/+/994571 so that a user can only set the default checksum to one that is a full object MPU checksum (which is only CRC algorithms. Thanks for bringing this error up!","commit_id":"70f90ae0b6484e7eac44f93f018979f5c116e75a"}],"test/s3api/test_object_checksums.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1de797652b47b74f09972c50694cb48dcd72d0fe","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        self.assertNotIn(\u0027StorageClass\u0027, resp)"},{"line_number":799,"context_line":"        self.assertNotIn(\u0027ObjectSize\u0027, resp)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"class ObjectChecksumMPUCompositeMixin(object):"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def test_mpu_create_composite_checksum_type_headers(self):"},{"line_number":804,"context_line":"        self._test_mpu_create_checksum_type_headers(\u0027COMPOSITE\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"876ca2e2_a6ad605f","line":801,"updated":"2026-07-06 20:43:19.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"e6ec810c29f8d5710973b8e07dbf027851d1f078"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e11bcfe07831e36b23c58cebb1acdc700492c8c6","unresolved":false,"context_lines":[{"line_number":1497,"context_line":"                \u0027recomputation\u0027)"},{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1500,"context_line":"        src_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-src\u0027)"},{"line_number":1501,"context_line":"        dst_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-dst\u0027)"},{"line_number":1502,"context_line":"        put_resp \u003d self.client.put_object("},{"line_number":1503,"context_line":"            Bucket\u003dself.bucket_name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"b57bdd0c_78774e2f","line":1500,"updated":"2026-07-09 19:57:04.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"bebab382e5a576a726b24330e129663c0bfc9630"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e11bcfe07831e36b23c58cebb1acdc700492c8c6","unresolved":false,"context_lines":[{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1500,"context_line":"        src_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-src\u0027)"},{"line_number":1501,"context_line":"        dst_name \u003d self.create_name(\u0027mpu-copy-full-object-checksum-mismatch-dst\u0027)"},{"line_number":1502,"context_line":"        put_resp \u003d self.client.put_object("},{"line_number":1503,"context_line":"            Bucket\u003dself.bucket_name,"},{"line_number":1504,"context_line":"            Key\u003dsrc_name,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3bcff242_6e80ba07","line":1501,"updated":"2026-07-09 19:57:04.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"bebab382e5a576a726b24330e129663c0bfc9630"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0d23cf2d8d315052c4a26d34bfe69cfc58843962","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"    def test_mpu_full_object_upload_part_checksum_optional(self):"},{"line_number":1269,"context_line":"        algorithm \u003d \u0027CRC32\u0027"},{"line_number":1270,"context_line":"        if anycrc is None:"},{"line_number":1271,"context_line":"            raise SkipTest("}],"source_content_type":"text/x-python","patch_set":48,"id":"160a1f0c_003a9c13","line":1268,"updated":"2026-07-27 16:50:10.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"abefe5a9ac560311effeefce3691ee90a75a5e6c"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e11bcfe07831e36b23c58cebb1acdc700492c8c6","unresolved":false,"context_lines":[{"line_number":2769,"context_line":"                                     \u0027X-Amz-Checksum-Type\u0027: \u0027full_object\u0027})"},{"line_number":2770,"context_line":""},{"line_number":2771,"context_line":"        with mock.patch.object(checksum, \u0027crc32_combine_anycrc\u0027, None):"},{"line_number":2772,"context_line":"            with self.assertRaises(S3NotImplemented) as cm:"},{"line_number":2773,"context_line":"                S3Request(req.environ)"},{"line_number":2774,"context_line":""},{"line_number":2775,"context_line":"    def test_mpu_initiate_crc32_default_checksum_type(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"853010e2_29c320bd","line":2772,"updated":"2026-07-09 19:57:04.000000000","message":"pep8: F841 local variable \u0027cm\u0027 is assigned to but never used","commit_id":"bebab382e5a576a726b24330e129663c0bfc9630"}]}
