)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e4fb1347_dd1bf764","updated":"2025-03-31 17:35:13.000000000","message":"I think this looks good, does what we need, and we should get it squashed.","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"}],"swift/common/middleware/s3api/s3api.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":true,"context_lines":[{"line_number":372,"context_line":"                             \u0027x-amz-checksum-crc32\u0027,"},{"line_number":373,"context_line":"                             \u0027x-amz-checksum-crc32c\u0027,"},{"line_number":374,"context_line":"                             \u0027x-amz-checksum-sha1\u0027,"},{"line_number":375,"context_line":"                             \u0027x-amz-checksum-crc64nvme\u0027):"},{"line_number":376,"context_line":"                label_val \u003d classify_checksum_header_value(hdr_val)"},{"line_number":377,"context_line":"            elif hdr_key \u003d\u003d \u0027x-amz-trailer\u0027:"},{"line_number":378,"context_line":"                label_val \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"6977ae3c_c57cc473","side":"PARENT","line":375,"updated":"2025-03-31 17:35:13.000000000","message":"if some of these header values appear unconventional it may have just been an attempt to classify unexpected/anomalous behavior from rouge clients/sdks.","commit_id":"0eed3ca5f35601dcb483543ae37cb66b3eb8bd20"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ab043a95ef2a9a3656ed2cc9d7f769abee7f1dd7","unresolved":true,"context_lines":[{"line_number":372,"context_line":"                             \u0027x-amz-checksum-crc32\u0027,"},{"line_number":373,"context_line":"                             \u0027x-amz-checksum-crc32c\u0027,"},{"line_number":374,"context_line":"                             \u0027x-amz-checksum-sha1\u0027,"},{"line_number":375,"context_line":"                             \u0027x-amz-checksum-crc64nvme\u0027):"},{"line_number":376,"context_line":"                label_val \u003d classify_checksum_header_value(hdr_val)"},{"line_number":377,"context_line":"            elif hdr_key \u003d\u003d \u0027x-amz-trailer\u0027:"},{"line_number":378,"context_line":"                label_val \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"2b515e44_2724c401","side":"PARENT","line":375,"in_reply_to":"6977ae3c_c57cc473","updated":"2025-04-01 09:24:04.000000000","message":"these are the set of S3 supported headers https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject\n\nIIRC x-amz-checksum-crc32 is the default sent by newer boto3","commit_id":"0eed3ca5f35601dcb483543ae37cb66b3eb8bd20"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":true,"context_lines":[{"line_number":200,"context_line":"    \u0027x-amz-checksum-sha1\u0027,"},{"line_number":201,"context_line":"    \u0027x-amz-checksum-sha256\u0027,"},{"line_number":202,"context_line":"    \u0027x-amz-checksum-crc64nvme\u0027"},{"line_number":203,"context_line":")"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"class ListingEtagMiddleware(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a29b516b_272cc733","line":203,"updated":"2025-03-31 17:35:13.000000000","message":"I think this list has at least the one value I know I care about:\n\n`\u0027X-Amz-Trailer\u0027: b\u0027x-amz-checksum-crc32\u0027`\n\nI\u0027m not sure if the other values are correct/useful - but I support having them since I\u0027d rather know the value than not!","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":true,"context_lines":[{"line_number":375,"context_line":"                else:"},{"line_number":376,"context_line":"                    label_val \u003d classify_checksum_header_value(hdr_val)"},{"line_number":377,"context_line":"            elif hdr_key \u003d\u003d \u0027content-md5\u0027:"},{"line_number":378,"context_line":"                label_val \u003d classify_checksum_header_value(hdr_val)"},{"line_number":379,"context_line":"            elif hdr_key in WELL_KNOWN_CHECKSUM_HEADERS:"},{"line_number":380,"context_line":"                label_val \u003d classify_checksum_header_value(hdr_val)"},{"line_number":381,"context_line":"            elif hdr_key \u003d\u003d \u0027x-amz-trailer\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"30aedde9_ee9554d2","line":378,"updated":"2025-03-31 17:35:13.000000000","message":"IIRC this classify function is also robust and would for example tell us if a client sent a base64 encoded value instead of a hexdigest...\n\nI don\u0027t think we\u0027re at the point of really struggling with TMI - we barely know what\u0027s going on, much less what should be expected or unexpected.","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":true,"context_lines":[{"line_number":382,"context_line":"                if hdr_val.lower() in WELL_KNOWN_CHECKSUM_HEADERS:"},{"line_number":383,"context_line":"                    label_val \u003d hdr_val.lower()"},{"line_number":384,"context_line":"                else:"},{"line_number":385,"context_line":"                    label_val \u003d \u0027unknown\u0027"},{"line_number":386,"context_line":"            elif hdr_key in (\u0027x-amz-checksum-algorithm\u0027,"},{"line_number":387,"context_line":"                             \u0027x-amz-sdk-checksum-algorithm\u0027):"},{"line_number":388,"context_line":"                if hdr_val.upper() in WELL_KNOWN_CHECKSUM_ALGORITHMS:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d0ca8be_8af0c795","line":385,"updated":"2025-03-31 17:35:13.000000000","message":"this part of the diff looks good - and seems to address the problem we were having with not knowing what kind of checksum is being used when it comes in via trailers.","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"}],"test/unit/common/middleware/s3api/test_s3api.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90c8c7b9d48e7005d543efdaadc59af8018641e6","unresolved":true,"context_lines":[{"line_number":2294,"context_line":"                          \u0027type\u0027: \u0027object\u0027,"},{"line_number":2295,"context_line":"                          \u0027status\u0027: 400,  # IncompleteBody"},{"line_number":2296,"context_line":"                          \u0027header_x_amz_decoded_content_length\u0027: True,"},{"line_number":2297,"context_line":"                          \u0027header_x_amz_trailer\u0027: \u0027x-amz-checksum-sha256\u0027,"},{"line_number":2298,"context_line":"                          \u0027header_x_amz_content_sha256\u0027:"},{"line_number":2299,"context_line":"                              \u0027STREAMING-UNSIGNED-PAYLOAD-TRAILER\u0027},"},{"line_number":2300,"context_line":"                         labels)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5841d4e1_dff9dd51","line":2297,"updated":"2025-03-31 17:35:13.000000000","message":"presumably the more common expected value here will be some form of crc32?\n\ni.e. `\u0027X-Amz-Trailer\u0027: b\u0027x-amz-checksum-crc32\u0027`\n\n```\n2025-01-21 16:47:28,540 - ThreadPoolExecutor-0_0 - botocore.endpoint - DEBUG - Sending http request: \u003cAWSPreparedRequest stream_output\u003dFalse, method\u003dPUT, url\u003dhttps://pbss.s8k.io/s3test/obj3, headers\u003d{\u0027x-amz-sdk-checksum-algorithm\u0027: b\u0027CRC32\u0027, \u0027User-Agent\u0027: b\u0027aws-cli/1.37.3 md/Botocore#1.36.3 ua/2.0 os/linux#5.15.167.4-microsoft-standard-WSL2 md/arch#x86_64 lang/python#3.12.3 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.36.3\u0027, \u0027Expect\u0027: b\u0027100-continue\u0027, \u0027Transfer-Encoding\u0027: b\u0027chunked\u0027, \u0027Content-Encoding\u0027: b\u0027aws-chunked\u0027, \u0027X-Amz-Trailer\u0027: b\u0027x-amz-checksum-crc32\u0027, \u0027X-Amz-Decoded-Content-Length\u0027: b\u00278\u0027, \u0027X-Amz-Date\u0027: b\u002720250121T224728Z\u0027, \u0027X-Amz-Content-SHA256\u0027: b\u0027STREAMING-UNSIGNED-PAYLOAD-TRAILER\u0027, \u0027Authorization\u0027: b\u0027AWS4-HMAC-SHA256 Credential\u003dclayg/20250121/us-east-1/s3/aws4_request, SignedHeaders\u003dcontent-encoding;host;transfer-encoding;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-sdk-checksum-algorithm;x-amz-trailer, Signature\u003dd1eeff8328e43c8ae580ad4fab31d0efca00380af346ff95efd9740fcccbdc14\u0027, \u0027amz-sdk-invocation-id\u0027: b\u0027381ebcb0-5799-47f6-bc57-eb4c90785646\u0027, \u0027amz-sdk-request\u0027: b\u0027attempt\u003d1\u0027}\u003e\n\n```","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ab043a95ef2a9a3656ed2cc9d7f769abee7f1dd7","unresolved":true,"context_lines":[{"line_number":2294,"context_line":"                          \u0027type\u0027: \u0027object\u0027,"},{"line_number":2295,"context_line":"                          \u0027status\u0027: 400,  # IncompleteBody"},{"line_number":2296,"context_line":"                          \u0027header_x_amz_decoded_content_length\u0027: True,"},{"line_number":2297,"context_line":"                          \u0027header_x_amz_trailer\u0027: \u0027x-amz-checksum-sha256\u0027,"},{"line_number":2298,"context_line":"                          \u0027header_x_amz_content_sha256\u0027:"},{"line_number":2299,"context_line":"                              \u0027STREAMING-UNSIGNED-PAYLOAD-TRAILER\u0027},"},{"line_number":2300,"context_line":"                         labels)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae7e91a3_d1a1a175","line":2297,"in_reply_to":"5841d4e1_dff9dd51","updated":"2025-04-01 09:24:04.000000000","message":"yes, x-amz-checksum-crc32 is the boto3 default AFAICT","commit_id":"a5742ed3b9afc81342cc53b92248d3dbc138ce33"}]}
