)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5d1afa438bec8ec34fadb58701f41455e5851893","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3e0239ac_432d0435","updated":"2025-04-08 16:54:27.000000000","message":"Even with master I see the full skip reason when running in my vsaio so curious about Tim\u0027s suggestion to restrict the fix to gate only runs","commit_id":"49dbac8aa055ecf661de77bf3cda689f1d0dab27"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"db5982a65baa6eb85db0eed33744c896c60a0f48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"67c4c0bc_0b4bdd1d","in_reply_to":"3e0239ac_432d0435","updated":"2025-04-08 16:56:10.000000000","message":"oops, I typed that on the wrong patch!a","commit_id":"49dbac8aa055ecf661de77bf3cda689f1d0dab27"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a5ce801a97713b5904aaf3144c5e533d7b3f6ff7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0ce460e9_45282188","updated":"2025-04-14 10:16:39.000000000","message":"squashed to https://review.opendev.org/c/openstack/swift/+/944073/22 so can be abandoned once discussion is resolved","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f2e0bb61a60e89eec0678209ee37923078597b41","unresolved":true,"context_lines":[{"line_number":1294,"context_line":""},{"line_number":1295,"context_line":"        return aws_sha256"},{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"    def _install_input_wrapper(self, expected_trailers):"},{"line_number":1298,"context_line":"        aws_sha256 \u003d self.headers.get(\u0027x-amz-content-sha256\u0027)"},{"line_number":1299,"context_line":""},{"line_number":1300,"context_line":"        if self._is_streaming_supported and aws_sha256 in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"a0310380_1c50042d","line":1297,"updated":"2025-03-31 17:54:22.000000000","message":"I flip this way and that on having a Sigv4 specific version of this method or not. This time I flipped to not and using self._is_streaming_supported  to make a sigv4 conditional branch instead, because:\n\n(a) I\u0027m tired of jumping between S3Request and the SigV4Mixin class\n\n(b) the unified method is a little shorter than it would have been now the x-amz-trailer validation has already been done.","commit_id":"7ecf297eabe8436722a553241cdcf620e2002ee7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":false,"context_lines":[{"line_number":1294,"context_line":""},{"line_number":1295,"context_line":"        return aws_sha256"},{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"    def _install_input_wrapper(self, expected_trailers):"},{"line_number":1298,"context_line":"        aws_sha256 \u003d self.headers.get(\u0027x-amz-content-sha256\u0027)"},{"line_number":1299,"context_line":""},{"line_number":1300,"context_line":"        if self._is_streaming_supported and aws_sha256 in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"188b2ab5_4327775b","line":1297,"in_reply_to":"a0310380_1c50042d","updated":"2025-04-14 10:14:21.000000000","message":"Done","commit_id":"7ecf297eabe8436722a553241cdcf620e2002ee7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f2e0bb61a60e89eec0678209ee37923078597b41","unresolved":true,"context_lines":[{"line_number":1364,"context_line":"        header \u003d self.headers.get(\u0027x-amz-trailer\u0027, \u0027\u0027).strip()"},{"line_number":1365,"context_line":"        checksum_headers \u003d ["},{"line_number":1366,"context_line":"            v.strip() for v in header.rstrip(\u0027,\u0027).split(\u0027,\u0027)"},{"line_number":1367,"context_line":"        ] if header else []"},{"line_number":1368,"context_line":"        if any(h not in CHECKSUMS_BY_HEADER"},{"line_number":1369,"context_line":"               for h in checksum_headers):"},{"line_number":1370,"context_line":"            raise InvalidRequest(\u0027The value specified in the x-amz-trailer \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"16eab691_b99d2375","line":1367,"updated":"2025-03-31 17:54:22.000000000","message":"this fixes a bug that was obscured by the fact that this validation was already being done (correctly) in install_input_wrapper()","commit_id":"7ecf297eabe8436722a553241cdcf620e2002ee7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        header \u003d self.headers.get(\u0027x-amz-trailer\u0027, \u0027\u0027).strip()"},{"line_number":1365,"context_line":"        checksum_headers \u003d ["},{"line_number":1366,"context_line":"            v.strip() for v in header.rstrip(\u0027,\u0027).split(\u0027,\u0027)"},{"line_number":1367,"context_line":"        ] if header else []"},{"line_number":1368,"context_line":"        if any(h not in CHECKSUMS_BY_HEADER"},{"line_number":1369,"context_line":"               for h in checksum_headers):"},{"line_number":1370,"context_line":"            raise InvalidRequest(\u0027The value specified in the x-amz-trailer \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7497d565_a2b1c2d6","line":1367,"in_reply_to":"16eab691_b99d2375","updated":"2025-04-14 10:14:21.000000000","message":"Done","commit_id":"7ecf297eabe8436722a553241cdcf620e2002ee7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e12085bcdad7fa501c73b4ec33a38d928cf91a51","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":1014,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":1015,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":1016,"context_line":"        aws_sha256 \u003d self._validate_headers()"},{"line_number":1017,"context_line":"        self.sig_checker \u003d self.sig_checker_cls(self)"},{"line_number":1018,"context_line":"        if self.method in (\u0027PUT\u0027, \u0027POST\u0027):"},{"line_number":1019,"context_line":"            checksum_hasher, checksum_header, checksum_in_trailer \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"7d31ab2f_f03f4e6e","line":1016,"updated":"2025-04-12 17:18:53.000000000","message":"Having `_validate_sha256` return the header value seems reasonable -- having `_validate_headers` return it is more suspect.","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":1014,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":1015,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":1016,"context_line":"        aws_sha256 \u003d self._validate_headers()"},{"line_number":1017,"context_line":"        self.sig_checker \u003d self.sig_checker_cls(self)"},{"line_number":1018,"context_line":"        if self.method in (\u0027PUT\u0027, \u0027POST\u0027):"},{"line_number":1019,"context_line":"            checksum_hasher, checksum_header, checksum_in_trailer \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"a7df3b04_41e31ba7","line":1016,"in_reply_to":"7d31ab2f_f03f4e6e","updated":"2025-04-14 10:14:21.000000000","message":"agree, I was frustrated to not be able to move _validate_sha56 out of _validate_headers because the order of validations is significant (for S3 compat)","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7f7b7a1101ea29c0deb40d347091d097baf6826a","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":1014,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":1015,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":1016,"context_line":"        aws_sha256 \u003d self._validate_headers()"},{"line_number":1017,"context_line":"        self.sig_checker \u003d self.sig_checker_cls(self)"},{"line_number":1018,"context_line":"        if self.method in (\u0027PUT\u0027, \u0027POST\u0027):"},{"line_number":1019,"context_line":"            checksum_hasher, checksum_header, checksum_in_trailer \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"a911bcb4_456497ea","line":1016,"in_reply_to":"a7df3b04_41e31ba7","updated":"2025-04-15 17:54:43.000000000","message":"FWIW, the approach I took in https://review.opendev.org/c/openstack/swift/+/836755/73/swift/common/middleware/s3api/s3request.py#954 was to call `_validate_headers` then pull out `aws_sha256` explicitly from headers (now that they\u0027ve been validated). I think I like that balance.","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6c39d81739baec1e49ca3d54e003971eb7fc41cc","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":1014,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":1015,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":1016,"context_line":"        aws_sha256 \u003d self._validate_headers()"},{"line_number":1017,"context_line":"        self.sig_checker \u003d self.sig_checker_cls(self)"},{"line_number":1018,"context_line":"        if self.method in (\u0027PUT\u0027, \u0027POST\u0027):"},{"line_number":1019,"context_line":"            checksum_hasher, checksum_header, checksum_in_trailer \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7174bb_3cd5a57e","line":1016,"in_reply_to":"a911bcb4_456497ea","updated":"2025-04-22 10:08:11.000000000","message":"yep, I saw that, all good.","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9fc10767a19fe3eedeb8b89c51bf793ce182f781","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":1014,"context_line":"        self.bucket_in_host \u003d self._parse_host()"},{"line_number":1015,"context_line":"        self.container_name, self.object_name \u003d self._parse_uri()"},{"line_number":1016,"context_line":"        aws_sha256 \u003d self._validate_headers()"},{"line_number":1017,"context_line":"        self.sig_checker \u003d self.sig_checker_cls(self)"},{"line_number":1018,"context_line":"        if self.method in (\u0027PUT\u0027, \u0027POST\u0027):"},{"line_number":1019,"context_line":"            checksum_hasher, checksum_header, checksum_in_trailer \u003d \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"fe834de6_3c88a5bb","line":1016,"in_reply_to":"df7174bb_3cd5a57e","updated":"2025-04-22 10:15:37.000000000","message":"Done","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":true,"context_lines":[{"line_number":1400,"context_line":"            h.lower(): v"},{"line_number":1401,"context_line":"            for h, v in self.headers.items()"},{"line_number":1402,"context_line":"            if (h.lower().startswith(\u0027x-amz-checksum-\u0027)"},{"line_number":1403,"context_line":"                and h.lower() not in (\u0027x-amz-checksum-algorithm\u0027,"},{"line_number":1404,"context_line":"                                      \u0027x-amz-checksum-type\u0027))"},{"line_number":1405,"context_line":"        }"},{"line_number":1406,"context_line":"        if any(h not in CHECKSUMS_BY_HEADER"},{"line_number":1407,"context_line":"               for h in checksum_headers):"},{"line_number":1408,"context_line":"            raise InvalidRequest(\u0027The algorithm type you specified in \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"56e705e2_e72bca41","line":1405,"range":{"start_line":1403,"start_character":0,"end_line":1405,"end_character":0},"updated":"2025-04-14 10:14:21.000000000","message":"note additional exclusions to allow for headers that come with mpu POSTs","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7f7b7a1101ea29c0deb40d347091d097baf6826a","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"            h.lower(): v"},{"line_number":1401,"context_line":"            for h, v in self.headers.items()"},{"line_number":1402,"context_line":"            if (h.lower().startswith(\u0027x-amz-checksum-\u0027)"},{"line_number":1403,"context_line":"                and h.lower() not in (\u0027x-amz-checksum-algorithm\u0027,"},{"line_number":1404,"context_line":"                                      \u0027x-amz-checksum-type\u0027))"},{"line_number":1405,"context_line":"        }"},{"line_number":1406,"context_line":"        if any(h not in CHECKSUMS_BY_HEADER"},{"line_number":1407,"context_line":"               for h in checksum_headers):"},{"line_number":1408,"context_line":"            raise InvalidRequest(\u0027The algorithm type you specified in \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"0546c891_9fce86c0","line":1405,"range":{"start_line":1403,"start_character":0,"end_line":1405,"end_character":0},"in_reply_to":"56e705e2_e72bca41","updated":"2025-04-15 17:54:43.000000000","message":"Ack -- included at https://review.opendev.org/c/openstack/swift/+/944073/22/swift/common/middleware/s3api/s3request.py#1403","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"}],"test/s3api/test_object_checksums.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e12085bcdad7fa501c73b4ec33a38d928cf91a51","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":187,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("},{"line_number":188,"context_line":"            Bucket\u003dself.bucket_name, Key\u003dobj_name,"},{"line_number":189,"context_line":"            ChecksumType\u003d\u0027COMPOSITE\u0027,"},{"line_number":190,"context_line":"            ChecksumAlgorithm\u003dself.ALGORITHM)"},{"line_number":191,"context_line":"        self.assertEqual(200, create_mpu_resp["},{"line_number":192,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd3fb3d8_923fdc30","line":189,"updated":"2025-04-12 17:18:53.000000000","message":"Do we look at this at all yet? I can\u0027t decide whether we should 501 requests for `FULL_OBJECT` or just go ahead and accept it...\n\nOur \"we\u0027ll check it, but never return it\" approach calls to mind http://www.supersimplestorageservice.com/ :P","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7f7b7a1101ea29c0deb40d347091d097baf6826a","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":187,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("},{"line_number":188,"context_line":"            Bucket\u003dself.bucket_name, Key\u003dobj_name,"},{"line_number":189,"context_line":"            ChecksumType\u003d\u0027COMPOSITE\u0027,"},{"line_number":190,"context_line":"            ChecksumAlgorithm\u003dself.ALGORITHM)"},{"line_number":191,"context_line":"        self.assertEqual(200, create_mpu_resp["},{"line_number":192,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"2d0ee28f_d90c813f","line":189,"in_reply_to":"22248a4c_ea7834cf","updated":"2025-04-15 17:54:43.000000000","message":"Hmm... makes me think we should have some tests in `test_input_errors.py` (where we have strong control over the headers sent) that include `x-amz-checksum-algorithm` in PUTs...","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9fc10767a19fe3eedeb8b89c51bf793ce182f781","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":187,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("},{"line_number":188,"context_line":"            Bucket\u003dself.bucket_name, Key\u003dobj_name,"},{"line_number":189,"context_line":"            ChecksumType\u003d\u0027COMPOSITE\u0027,"},{"line_number":190,"context_line":"            ChecksumAlgorithm\u003dself.ALGORITHM)"},{"line_number":191,"context_line":"        self.assertEqual(200, create_mpu_resp["},{"line_number":192,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"c6f229fa_0a6e2817","line":189,"in_reply_to":"2d0ee28f_d90c813f","updated":"2025-04-22 10:15:37.000000000","message":"done here https://review.opendev.org/c/openstack/swift/+/947449/2/test/s3api/test_input_errors.py","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":187,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("},{"line_number":188,"context_line":"            Bucket\u003dself.bucket_name, Key\u003dobj_name,"},{"line_number":189,"context_line":"            ChecksumType\u003d\u0027COMPOSITE\u0027,"},{"line_number":190,"context_line":"            ChecksumAlgorithm\u003dself.ALGORITHM)"},{"line_number":191,"context_line":"        self.assertEqual(200, create_mpu_resp["},{"line_number":192,"context_line":"            \u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"22248a4c_ea7834cf","line":189,"in_reply_to":"dd3fb3d8_923fdc30","updated":"2025-04-14 10:14:21.000000000","message":"hmmm, IIRC I added this to provoke the client to send an x-amz-checksum-type header, because when I add \u0027POST\u0027 as a condition for checksum header validation I noticed the existing validation failing (because we were treating x-amz-checksum-type as an unrecognised crc algorithm \u0027type\u0027.\n\nDitto x-amz-checksum-algorithm (as opposed to x-amz-sdk-checksum-algorithm). IIRC this comes with POSTs but not PUTs, which kind-of makes sense because with an MPU it is an instruction to the server rather than a declaration of what the client is sending??\n\nBut, that said, on reflection maybe setting the header in this test is a little off given that Swift ignores it.","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"}],"test/unit/common/middleware/s3api/test_multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e12085bcdad7fa501c73b4ec33a38d928cf91a51","unresolved":true,"context_lines":[{"line_number":1144,"context_line":"            \u0027AUTH_test\u0027, \u0027bucket\u0027)] \u003d {\u0027status\u0027: 204}"},{"line_number":1145,"context_line":"        self._test_object_multipart_upload_initiate("},{"line_number":1146,"context_line":"            {\u0027X-Amz-Checksum-Algorithm\u0027: \u0027CRC32\u0027,"},{"line_number":1147,"context_line":"             \u0027X-Amz-Checksum-Type\u0027: \u0027COMPOSITE\u0027}, fake_memcache)"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"    def test_object_mpu_initiate_with_segment_bucket_mixed_policy(self):"},{"line_number":1150,"context_line":"        fake_memcache \u003d FakeMemcache()"}],"source_content_type":"text/x-python","patch_set":4,"id":"15e6cb5c_1b2db87d","line":1147,"updated":"2025-04-12 17:18:53.000000000","message":"I mean... this passes on master, doesn\u0027t it?\n\nDo we want tests for any other arbitrary headers that are expected to be ignored?","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7f7b7a1101ea29c0deb40d347091d097baf6826a","unresolved":true,"context_lines":[{"line_number":1144,"context_line":"            \u0027AUTH_test\u0027, \u0027bucket\u0027)] \u003d {\u0027status\u0027: 204}"},{"line_number":1145,"context_line":"        self._test_object_multipart_upload_initiate("},{"line_number":1146,"context_line":"            {\u0027X-Amz-Checksum-Algorithm\u0027: \u0027CRC32\u0027,"},{"line_number":1147,"context_line":"             \u0027X-Amz-Checksum-Type\u0027: \u0027COMPOSITE\u0027}, fake_memcache)"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"    def test_object_mpu_initiate_with_segment_bucket_mixed_policy(self):"},{"line_number":1150,"context_line":"        fake_memcache \u003d FakeMemcache()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ca1574b_e1c5c876","line":1147,"in_reply_to":"01bc6aa3_4d1bbf72","updated":"2025-04-15 17:54:43.000000000","message":"Ack -- I wasn\u0027t opposed, just found it interesting. It\u0027s still present at https://review.opendev.org/c/openstack/swift/+/836755/73/test/unit/common/middleware/s3api/test_multi_upload.py -- but maybe it could/should be an independent patch?","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1af1f7f9eef4f5402adead41fe5855c14ed5b002","unresolved":true,"context_lines":[{"line_number":1144,"context_line":"            \u0027AUTH_test\u0027, \u0027bucket\u0027)] \u003d {\u0027status\u0027: 204}"},{"line_number":1145,"context_line":"        self._test_object_multipart_upload_initiate("},{"line_number":1146,"context_line":"            {\u0027X-Amz-Checksum-Algorithm\u0027: \u0027CRC32\u0027,"},{"line_number":1147,"context_line":"             \u0027X-Amz-Checksum-Type\u0027: \u0027COMPOSITE\u0027}, fake_memcache)"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"    def test_object_mpu_initiate_with_segment_bucket_mixed_policy(self):"},{"line_number":1150,"context_line":"        fake_memcache \u003d FakeMemcache()"}],"source_content_type":"text/x-python","patch_set":4,"id":"01bc6aa3_4d1bbf72","line":1147,"in_reply_to":"15e6cb5c_1b2db87d","updated":"2025-04-14 10:14:21.000000000","message":"See my comments above - the headers aren\u0027t arbitrary, they are part of the s3 api, and the purpose of the test is to validate that swift doesn\u0027t barf if it receives them (which it would on a previous patchset prior to the extra exclusions in _validate_x_amz_checksum_headers see https://review.opendev.org/c/openstack/swift/+/945983/comment/56e705e2_e72bca41/ )","commit_id":"fe2698f9b6a1c249e28af7727735f42fe4cc5a91"}]}
