)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"efcd7b90c07b41a2ae7b8c2b1fa178bedd6cb4ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":64,"id":"4dd560ae_ac8854cb","updated":"2026-08-06 16:25:21.000000000","message":"Need to add default checksums on MPUs","commit_id":"72125b3bdfdf7e6916033b8397b4ae8db1e0dd96"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"76810274cb71f9b9384a4b4a927d8b92655c6260","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":65,"id":"bf6ed8af_db0556ef","updated":"2026-08-07 17:06:43.000000000","message":"mpu stuff needed still...","commit_id":"2706c3a8956158b1f5a6fd50d2abdffc4020fe68"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"b233ef1b566041fcb892f03897f9d69b6a4cfa2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":72,"id":"b49150f7_27a0cc4c","updated":"2026-08-17 16:38:03.000000000","message":"Some logic refactoring is needed first","commit_id":"6c597a09a7027923caa05d4d6bba14386be79d0d"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"289ac1dfa74115819e1c383d801542de3edadcd8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":76,"id":"2914f471_90f58fbf","updated":"2026-08-19 17:00:41.000000000","message":"Tried this on a SAIO with `default_checksum_algorithm \u003d crc32` in `[filter:s3api]`. A PutObject with no Content-Length (chunked transfer-encoding) now returns 500 InternalError.\n\nReproducer:\n\n```\n#!/bin/bash\nswift post bucket\n\nURL\u003d$(python3 - \u003c\u003cEOF\nimport sys\nimport boto3\nfrom botocore.client import Config\n\ns3 \u003d boto3.client(\n    \u0027s3\u0027,\n    endpoint_url\u003d\u0027http://127.0.0.1:8080\u0027,\n    aws_access_key_id\u003d\u0027test:tester\u0027,\n    aws_secret_access_key\u003d\u0027testing\u0027,\n    region_name\u003d\u0027us-east-1\u0027,\n    config\u003dConfig(signature_version\u003d\u0027s3v4\u0027, s3\u003d{\u0027addressing_style\u0027: \u0027path\u0027}),\n)\nprint(s3.generate_presigned_url(\n    \u0027put_object\u0027, Params\u003d{\u0027Bucket\u0027: \u0027bucket\u0027, \u0027Key\u0027: \u0027key\u0027}, ExpiresIn\u003d3600))\nEOF\n)\n\ncurl -v -X PUT -H \u0027Transfer-Encoding: chunked\u0027 --data-binary \"Hello World\" \"${URL}\"\n```","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"86f0ddefd760ce2d47e02667ea83181ec8c17b61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":76,"id":"478df8ee_59fc5b9c","in_reply_to":"2914f471_90f58fbf","updated":"2026-08-19 21:06:25.000000000","message":"I initially was skeptical on this because AFAIK S3 does not support just a standalone `Transfer-Encoding: chunked` header unless some kind of length is present. AWS rejects the shape outright, and per https://docs.aws.amazon.com/AmazonS3/latest/developerguide/sigv4-streaming.html their streaming format (aws-chunked) mandates both x-amz-decoded-content-length and Content-Length.\n\nMeaning you cannot replicate it aganist S3, it actually gives you a 501 if you try to:\n```\n\u003cError\u003e\u003cCode\u003eNotImplemented\u003c/Code\u003e\u003cMessage\u003eA header you provided implies functionality that is not implemented\u003c/Message\u003e\u003cHeader\u003eTransfer-Encoding\u003c/Header\u003e\n```\n\nHowever, it looks like Swift does support `Transfer-Encoding: chunked` in the s3api! which can showcase the issue we are facing. Annoying we cannot get a compat test for this.\n\nI\u0027ll throw testing and make this fix. Quite the rabbit hole!","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"ab94f5eaa7ca3cf941ac475e08009f65ed0d207b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":76,"id":"b847e9ce_5de49020","in_reply_to":"478df8ee_59fc5b9c","updated":"2026-08-19 21:39:44.000000000","message":"I\u0027ll bring this up, but it looks like we had a fix that was going to block this kind of behavior from being possible, but it got dropped....\n927177: s3api: 501 \u0027Transfer-Encoding: chunked\u0027 requests | https://review.opendev.org/c/openstack/swift/+/927177\nThanks @tburke@nvidia.com !","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"d7a408dd8aba77ec807ccc1e90a1f0be3215b0c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":77,"id":"42c0b05c_8b52c3bc","updated":"2026-08-19 23:36:14.000000000","message":"This is not just happening here, but on master too!\nSince swift already supports Transfer-Encoding: chunked,\nWe can just keep the support and defer a fix in a earlier standalone patch 1001585: s3api: fix Transfer-Encoding: chunked with checksums | https://review.opendev.org/c/openstack/swift/+/1001585","commit_id":"f132eef4b5ca2e1d3d9a8cb247cc0a75dcf7888c"}],"swift/common/middleware/s3api/controllers/multi_upload.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":935,"context_line":"                # with the stored MPU checksum attributes"},{"line_number":936,"context_line":"                _validate_upload_part_checksum_headers("},{"line_number":937,"context_line":"                    req, mpu_checksum_attrs)"},{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"}],"source_content_type":"text/x-python","patch_set":90,"id":"3d1bc458_f1cf89e4","line":938,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E502 the backslash is redundant between brackets","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                _validate_upload_part_checksum_headers("},{"line_number":937,"context_line":"                    req, mpu_checksum_attrs)"},{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"},{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"}],"source_content_type":"text/x-python","patch_set":90,"id":"41392bd8_48780dc4","line":939,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                _validate_upload_part_checksum_headers("},{"line_number":937,"context_line":"                    req, mpu_checksum_attrs)"},{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"},{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"}],"source_content_type":"text/x-python","patch_set":90,"id":"b1614b2e_806dca17","line":939,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E502 the backslash is redundant between brackets","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                    req, mpu_checksum_attrs)"},{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"},{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"},{"line_number":943,"context_line":"                # default checksum already, otherwise, Layer an outer wrapper"}],"source_content_type":"text/x-python","patch_set":90,"id":"23d81e6a_c61da097","line":940,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":937,"context_line":"                    req, mpu_checksum_attrs)"},{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"},{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"},{"line_number":943,"context_line":"                # default checksum already, otherwise, Layer an outer wrapper"}],"source_content_type":"text/x-python","patch_set":90,"id":"092b7be9_0419b828","line":940,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E502 the backslash is redundant between brackets","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":938,"context_line":"            elif (mpu_checksum_attrs.is_default_checksum and \\"},{"line_number":939,"context_line":"                not (client_checksumming_input and \\"},{"line_number":940,"context_line":"                client_checksumming_input.algorithm \u003d\u003d \\"},{"line_number":941,"context_line":"                    mpu_checksum_attrs.algorithm)):"},{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"},{"line_number":943,"context_line":"                # default checksum already, otherwise, Layer an outer wrapper"},{"line_number":944,"context_line":"                # that calculates the MPU\u0027s default. Any client checksum keeps"}],"source_content_type":"text/x-python","patch_set":90,"id":"0d84004e_8a770138","line":941,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":942,"context_line":"                # We can save a little bit of work if the client asked for the"},{"line_number":943,"context_line":"                # default checksum already, otherwise, Layer an outer wrapper"},{"line_number":944,"context_line":"                # that calculates the MPU\u0027s default. Any client checksum keeps"},{"line_number":945,"context_line":"                # its own wrapper underneath so it is still validated and echoed."},{"line_number":946,"context_line":"                req.install_checksumming_input("},{"line_number":947,"context_line":"                    _get_checksum_hasher(mpu_checksum_attrs),"},{"line_number":948,"context_line":"                    mpu_checksum_attrs.header, None)"}],"source_content_type":"text/x-python","patch_set":90,"id":"0ca3d980_533818eb","line":945,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"}],"swift/common/middleware/s3api/controllers/obj.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"289ac1dfa74115819e1c383d801542de3edadcd8","unresolved":true,"context_lines":[{"line_number":222,"context_line":"            if (req.request_checksum_header is None and"},{"line_number":223,"context_line":"                    req.conf.default_checksum_algorithm):"},{"line_number":224,"context_line":"                # Setup the request to calculate the default checksum"},{"line_number":225,"context_line":"                _install_default_checksumming_input(req)"},{"line_number":226,"context_line":"            req.persist_request_checksum(CHECKSUM_TYPE_FULL_OBJECT)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        req.check_copy_source(self.app)"}],"source_content_type":"text/x-python","patch_set":76,"id":"491e2e5e_e34ad1ca","line":225,"updated":"2026-08-19 17:00:41.000000000","message":"This now installs the default hasher for every non-copy PUT, so `ChecksummingInput` gets `_expected_length \u003d None` - see my comment in `s3checksum.py`","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"d7a408dd8aba77ec807ccc1e90a1f0be3215b0c0","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            if (req.request_checksum_header is None and"},{"line_number":223,"context_line":"                    req.conf.default_checksum_algorithm):"},{"line_number":224,"context_line":"                # Setup the request to calculate the default checksum"},{"line_number":225,"context_line":"                _install_default_checksumming_input(req)"},{"line_number":226,"context_line":"            req.persist_request_checksum(CHECKSUM_TYPE_FULL_OBJECT)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        req.check_copy_source(self.app)"}],"source_content_type":"text/x-python","patch_set":76,"id":"b0d01a7b_11485237","line":225,"in_reply_to":"491e2e5e_e34ad1ca","updated":"2026-08-19 23:36:14.000000000","message":"Acknowledged","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2aa5fdb748ce8e57805393c25476648445aebc86","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    CHECKSUMS_BY_HEADER, CHECKSUM_TYPE_FULL_OBJECT, \\"},{"line_number":33,"context_line":"    format_supported_checksum_algorithms, get_checksum_hasher"},{"line_number":34,"context_line":"from swift.common.middleware.s3api.utils import S3Timestamp, sysmeta_header, \\"},{"line_number":35,"context_line":"        swift3_object_sysmeta_header"},{"line_number":36,"context_line":"from swift.common.middleware.s3api.controllers.base import Controller"},{"line_number":37,"context_line":"from swift.common.middleware.s3api.s3response import S3NotImplemented, \\"},{"line_number":38,"context_line":"    InvalidRange, NoSuchKey, NoSuchVersion, InvalidArgument, HTTPNoContent, \\"}],"source_content_type":"text/x-python","patch_set":80,"id":"474b6307_330528b8","line":35,"updated":"2026-08-20 16:54:52.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"02adfc5a713b1e3dd9845b5236bbe847958bdd1e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"086c83cca3d9f8e59141d6ebe6d1f24352cb82cd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    CHECKSUMS_BY_HEADER, CHECKSUM_TYPE_FULL_OBJECT, \\"},{"line_number":33,"context_line":"    format_supported_checksum_algorithms, get_checksum_hasher"},{"line_number":34,"context_line":"from swift.common.middleware.s3api.utils import S3Timestamp, sysmeta_header, \\"},{"line_number":35,"context_line":"        swift3_object_sysmeta_header"},{"line_number":36,"context_line":"from swift.common.middleware.s3api.controllers.base import Controller"},{"line_number":37,"context_line":"from swift.common.middleware.s3api.s3response import S3NotImplemented, \\"},{"line_number":38,"context_line":"    InvalidRange, NoSuchKey, NoSuchVersion, InvalidArgument, HTTPNoContent, \\"}],"source_content_type":"text/x-python","patch_set":84,"id":"5566b9e6_c00f3901","line":35,"updated":"2026-08-21 00:10:43.000000000","message":"pep8: E126 continuation line over-indented for hanging indent","commit_id":"9c18a3590b9d1bce9ca5107753f1be7f301cc11c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c8cfb6e583218eb6523eb853081c99cc876634c8","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                default_checksum_header)"},{"line_number":237,"context_line":"        else:"},{"line_number":238,"context_line":"            # If the client did not send a checksum with this PUT, then add our"},{"line_number":239,"context_line":"            # own default checksum if we have one, we do this by wrapping the input"},{"line_number":240,"context_line":"            # with ChecksummingInput"},{"line_number":241,"context_line":"            if default_checksum_header and req.checksumming_input is None:"},{"line_number":242,"context_line":"                req.install_checksumming_input("}],"source_content_type":"text/x-python","patch_set":90,"id":"bc4c9a09_860b5b64","line":239,"updated":"2026-08-30 22:58:21.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"16786f3c3ca58bd8e939ab44d1cf2da34c2db45d"}],"swift/common/middleware/s3api/s3checksum.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"289ac1dfa74115819e1c383d801542de3edadcd8","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        # Note that \"chunk\" is just whatever was read from the input; this"},{"line_number":199,"context_line":"        # says nothing about whether the underlying stream uses aws-chunked."},{"line_number":200,"context_line":"        self._checksum_hasher.update(chunk)"},{"line_number":201,"context_line":"        if self.bytes_received \u003c self._expected_length:"},{"line_number":202,"context_line":"            # A non-empty short read may be one chunk from an iterable-backed"},{"line_number":203,"context_line":"            # input rather than the end of the input."},{"line_number":204,"context_line":"            error \u003d eof and not chunk"}],"source_content_type":"text/x-python","patch_set":76,"id":"e75a70e2_3b5e57f2","line":201,"updated":"2026-08-19 17:00:41.000000000","message":"This now fails. One option to fix this is to put the following check one line above, before the existing `if`:\n\n```\nif self._expected_length is None:\n    if not (eof and not chunk):\n        return chunk\n    self._expected_length \u003d self.bytes_received\n\n```","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"d7a408dd8aba77ec807ccc1e90a1f0be3215b0c0","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        # Note that \"chunk\" is just whatever was read from the input; this"},{"line_number":199,"context_line":"        # says nothing about whether the underlying stream uses aws-chunked."},{"line_number":200,"context_line":"        self._checksum_hasher.update(chunk)"},{"line_number":201,"context_line":"        if self.bytes_received \u003c self._expected_length:"},{"line_number":202,"context_line":"            # A non-empty short read may be one chunk from an iterable-backed"},{"line_number":203,"context_line":"            # input rather than the end of the input."},{"line_number":204,"context_line":"            error \u003d eof and not chunk"}],"source_content_type":"text/x-python","patch_set":76,"id":"ce039ffc_4f904ee9","line":201,"in_reply_to":"5584661c_0d0785e0","updated":"2026-08-19 23:36:14.000000000","message":"Acknowledged","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"},{"author":{"_account_id":39146,"name":"Nathaniel Martes","display_name":"Nate Martes","email":"natemartes09@gmail.com","username":"nmartes"},"change_message_id":"70b8b43fd2482d3b1d0bbd96edb8dde3ab32a190","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        # Note that \"chunk\" is just whatever was read from the input; this"},{"line_number":199,"context_line":"        # says nothing about whether the underlying stream uses aws-chunked."},{"line_number":200,"context_line":"        self._checksum_hasher.update(chunk)"},{"line_number":201,"context_line":"        if self.bytes_received \u003c self._expected_length:"},{"line_number":202,"context_line":"            # A non-empty short read may be one chunk from an iterable-backed"},{"line_number":203,"context_line":"            # input rather than the end of the input."},{"line_number":204,"context_line":"            error \u003d eof and not chunk"}],"source_content_type":"text/x-python","patch_set":76,"id":"5584661c_0d0785e0","line":201,"in_reply_to":"e75a70e2_3b5e57f2","updated":"2026-08-19 22:31:14.000000000","message":"It actually was failing on `master` too! how precarious (for non-AWS-compat clients that is)","commit_id":"c7a600ef17c6b10993e2426763c71d2bdeac211e"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"08a81277a719b505b27b64d63309a47d33fb7204","unresolved":false,"context_lines":[{"line_number":1596,"context_line":"                \u0027checksum algorithm.\u0027 % ("},{"line_number":1597,"context_line":"                    checksum_type, checksum_algorithm.lower()))"},{"line_number":1598,"context_line":"        if checksum_type \u003d\u003d CHECKSUM_TYPE_FULL_OBJECT:"},{"line_number":1599,"context_line":"            checksum_header \u003d checksum_header_from_algorithm(checksum_algorithm)"},{"line_number":1600,"context_line":"            try:"},{"line_number":1601,"context_line":"                checksum_hasher \u003d CHECKSUMS_BY_HEADER[checksum_header]()"},{"line_number":1602,"context_line":"            except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":19,"id":"65375d79_f01d1df0","line":1599,"updated":"2026-07-09 20:01:56.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"df9bf10e437b774377aac9b82baa23db71d81905"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"df304c07ab5c45542c761c3a8ca43bed040076b8","unresolved":false,"context_lines":[{"line_number":1920,"context_line":"        Install a callback to persist checksum metadata after validation."},{"line_number":1921,"context_line":"        If checksum calculation fails (say for instance, the connection drops),"},{"line_number":1922,"context_line":"        the PUT fails before a checksum is recorded, so no checksum sysmeta is"},{"line_number":1923,"context_line":"        persisted. Once Swift reads in the entire object, the checksum is finshed"},{"line_number":1924,"context_line":"        and sysmeta is attached to the uploaded whole-object body."},{"line_number":1925,"context_line":"        :param checksum_type: The type of checksum to persist."},{"line_number":1926,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"43b379b2_398a37af","line":1923,"updated":"2026-07-20 22:05:46.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"520645ec934055580a090314fc58c74736a0636d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"df304c07ab5c45542c761c3a8ca43bed040076b8","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"    def calculate_checksum_metadata(self, checksum_header,"},{"line_number":1940,"context_line":"                                    checksum_type\u003dNone):"},{"line_number":1941,"context_line":"        \"\"\""},{"line_number":1942,"context_line":"        Specify that in this S3Request, we need to calcuate the checksum for the"},{"line_number":1943,"context_line":"        object because the client did not specify any checksum algorithm."},{"line_number":1944,"context_line":"        :param checksum_header: The header to calcuated for this object."},{"line_number":1945,"context_line":"        :param checksum_type: The type of this checksum for this object."}],"source_content_type":"text/x-python","patch_set":31,"id":"8a9ea765_4b36b3aa","line":1942,"updated":"2026-07-20 22:05:46.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"520645ec934055580a090314fc58c74736a0636d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"06599b2ec2ce0fd0a7f6becbcffeaab9f90cc1cd","unresolved":false,"context_lines":[{"line_number":1763,"context_line":"        here."},{"line_number":1764,"context_line":"        \"\"\""},{"line_number":1765,"context_line":"        return ("},{"line_number":1766,"context_line":"            self._should_handle_request_checksum(self.method) and \\"},{"line_number":1767,"context_line":"            checksum_header is None and"},{"line_number":1768,"context_line":"            checksum_trailer is None)"},{"line_number":1769,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"2cabbe9b_a5710dba","line":1766,"updated":"2026-07-21 01:16:31.000000000","message":"pep8: E502 the backslash is redundant between brackets","commit_id":"a53dd02669f64a0650f671df2588e940e5e91781"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"70e075f706baeb8a9628fabd4dedca1093b4ae7c","unresolved":false,"context_lines":[{"line_number":1934,"context_line":"        Specify that in this S3Request, we need to calculate the checksum for"},{"line_number":1935,"context_line":"        the object because the client did not specify any checksum algorithm."},{"line_number":1936,"context_line":""},{"line_number":1937,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1938,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1939,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1940,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"}],"source_content_type":"text/x-python","patch_set":39,"id":"a7bbeebf_1f3282d4","line":1937,"updated":"2026-07-21 23:46:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4b2c59cbfda89b58f5a81d435d736fec32371a6c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"70e075f706baeb8a9628fabd4dedca1093b4ae7c","unresolved":false,"context_lines":[{"line_number":1936,"context_line":""},{"line_number":1937,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1938,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1939,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1940,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1941,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1942,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1c05a72a_03da599e","line":1939,"updated":"2026-07-21 23:46:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"4b2c59cbfda89b58f5a81d435d736fec32371a6c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"70e075f706baeb8a9628fabd4dedca1093b4ae7c","unresolved":false,"context_lines":[{"line_number":1937,"context_line":"        If request parsing already installed a CalculatingChecksumInput wrapper,"},{"line_number":1938,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1939,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1940,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1941,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"        :param checksum_header: The header to calculate for this object."}],"source_content_type":"text/x-python","patch_set":39,"id":"cb9d876a_8013676c","line":1940,"updated":"2026-07-21 23:46:41.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"4b2c59cbfda89b58f5a81d435d736fec32371a6c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"70e075f706baeb8a9628fabd4dedca1093b4ae7c","unresolved":false,"context_lines":[{"line_number":1938,"context_line":"        replace that wrapper rather than putting another on top of it."},{"line_number":1939,"context_line":"        Let\u0027s not compute two checksum algorithms for one S3Request. Controllers"},{"line_number":1940,"context_line":"        may discover a more specific checksum algorithm, such as an UploadPart request"},{"line_number":1941,"context_line":"        deciding to use the algorithm on the MPU manifest, before the body is read."},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"        :param checksum_header: The header to calculate for this object."},{"line_number":1944,"context_line":"        :param checksum_type: The type of this checksum for this object."}],"source_content_type":"text/x-python","patch_set":39,"id":"49ec5e7e_260c4d8d","line":1941,"updated":"2026-07-21 23:46:41.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"4b2c59cbfda89b58f5a81d435d736fec32371a6c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1e36a99e56b367d0ce0b864359b45bae89fda5f6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    \u0027x-static-large-object\u0027,"},{"line_number":118,"context_line":"))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def _get_checksum_hasher(header):"},{"line_number":121,"context_line":"    try:"},{"line_number":122,"context_line":"        return CHECKSUMS_BY_HEADER[header]()"},{"line_number":123,"context_line":"    except (KeyError, NotImplementedError):"}],"source_content_type":"text/x-python","patch_set":51,"id":"9ec905a7_aab40eaf","line":120,"updated":"2026-07-28 18:57:15.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"a7df5b81881328e0220a2698fbc63174e85483e4"}],"swift/common/middleware/s3api/utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1cd604f5f7a4625d7d70a927575c17d7e545b8ae","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \u0027x-amz-checksum-sha1\u0027: \u0027ChecksumSHA1\u0027,"},{"line_number":59,"context_line":"    \u0027x-amz-checksum-sha256\u0027: \u0027ChecksumSHA256\u0027,"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":"def checksum_header_from_algorithm(algorithm):"},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":"    Return the canonical x-amz-checksum-* header for an S3 checksum algorithm."},{"line_number":64,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"cd620f02_64dde56e","line":61,"updated":"2026-07-06 20:38:27.000000000","message":"pep8: E302 expected 2 blank lines, found 0","commit_id":"e40d46cb64d469f343eda7f8896af841849e3940"}],"test/s3api/test_object_checksums.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ccf917b9a23f8672b239bb18f14b7bd58bcb8a3e","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"        self.assertEqual(200, resp.status_code, resp.content)"},{"line_number":1450,"context_line":"        self.assertEqual(\u0027rosUhgp5mIg\u003d\u0027, resp.headers.get("},{"line_number":1451,"context_line":"            \u0027x-amz-checksum-crc64nvme\u0027))"},{"line_number":1452,"context_line":"        self.assertEqual(CHECKSUM_TYPE_FULL_OBJECT_VALUE, resp.headers.get("},{"line_number":1453,"context_line":"            CHECKSUM_TYPE_HDR))"}],"source_content_type":"text/x-python","patch_set":5,"id":"b25c7f5b_4b9b22d9","line":1452,"updated":"2026-06-25 18:01:19.000000000","message":"pep8: F821 undefined name \u0027CHECKSUM_TYPE_FULL_OBJECT_VALUE\u0027","commit_id":"240519a499942a66e7f1218fb036ee19456df9fa"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ccf917b9a23f8672b239bb18f14b7bd58bcb8a3e","unresolved":false,"context_lines":[{"line_number":1450,"context_line":"        self.assertEqual(\u0027rosUhgp5mIg\u003d\u0027, resp.headers.get("},{"line_number":1451,"context_line":"            \u0027x-amz-checksum-crc64nvme\u0027))"},{"line_number":1452,"context_line":"        self.assertEqual(CHECKSUM_TYPE_FULL_OBJECT_VALUE, resp.headers.get("},{"line_number":1453,"context_line":"            CHECKSUM_TYPE_HDR))"}],"source_content_type":"text/x-python","patch_set":5,"id":"c6455e7a_49092ce9","line":1453,"updated":"2026-06-25 18:01:19.000000000","message":"pep8: F821 undefined name \u0027CHECKSUM_TYPE_HDR\u0027","commit_id":"240519a499942a66e7f1218fb036ee19456df9fa"}],"test/unit/common/middleware/s3api/test_multi_upload.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e2b4f1d0e7109597765a65630201c31e61a65804","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from swift.common.utils import checksum, json, md5"},{"line_number":34,"context_line":"from swift.common.utils.timestamp import Timestamp, NormalTimestamp"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from test.unit import FakeMemcache, patch_policies, mock_normal_timestamp_now, \\"},{"line_number":37,"context_line":"    requires_crc64nvme"},{"line_number":38,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase, S3ApiTestCaseAcl"},{"line_number":39,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"}],"source_content_type":"text/x-python","patch_set":70,"id":"9765e935_a6d32b36","line":36,"updated":"2026-08-10 16:46:17.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"31b00f436bcbdb200ecd69af7e8026379acd58db"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2aa5fdb748ce8e57805393c25476648445aebc86","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    checksum_xml_element_from_header"},{"line_number":43,"context_line":"from swift.common.middleware.s3api.controllers.multi_upload import \\"},{"line_number":44,"context_line":"    MPUChecksumAttrs, _CompleteMultipartUploadSloManifestHook"},{"line_number":45,"context_line":"from swift.common.middleware.s3api.utils import sysmeta_header, mktime, \\"},{"line_number":46,"context_line":"    S3Timestamp"},{"line_number":47,"context_line":"from swift.common.middleware.s3api.s3request import MAX_32BIT_INT"},{"line_number":48,"context_line":"from swift.common.storage_policy import StoragePolicy, POLICIES"}],"source_content_type":"text/x-python","patch_set":80,"id":"b6f3058c_7dce47d5","line":45,"updated":"2026-08-20 16:54:52.000000000","message":"pep8: F401 \u0027swift.common.middleware.s3api.utils.mktime\u0027 imported but unused","commit_id":"02adfc5a713b1e3dd9845b5236bbe847958bdd1e"}],"test/unit/common/middleware/s3api/test_s3checksum.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0366612f638ab986445e289bd66bb9ea5be29512","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            wrapped.read()"},{"line_number":216,"context_line":"        self.assertTrue(wrapped.wsgi_input.closed)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"get_checksum_hasher"},{"line_number":219,"context_line":"class TestModuleFunctions(unittest.TestCase):"},{"line_number":220,"context_line":"    def test_normalize_checksum_mode(self):"},{"line_number":221,"context_line":"        self.assertIsNone(normalize_checksum_mode(None))"}],"source_content_type":"text/x-python","patch_set":88,"id":"1f441262_2b5b9768","line":218,"updated":"2026-08-25 01:01:38.000000000","message":"pep8: E305 expected 2 blank lines after class or function definition, found 1","commit_id":"a551cc50399aa3d339630a0ae27475d8267d97cb"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0366612f638ab986445e289bd66bb9ea5be29512","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.assertTrue(wrapped.wsgi_input.closed)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"get_checksum_hasher"},{"line_number":219,"context_line":"class TestModuleFunctions(unittest.TestCase):"},{"line_number":220,"context_line":"    def test_normalize_checksum_mode(self):"},{"line_number":221,"context_line":"        self.assertIsNone(normalize_checksum_mode(None))"},{"line_number":222,"context_line":"        self.assertEqual(\u0027ENABLED\u0027, normalize_checksum_mode(\u0027enabled\u0027))"}],"source_content_type":"text/x-python","patch_set":88,"id":"566dfbcc_4281a7fe","line":219,"updated":"2026-08-25 01:01:38.000000000","message":"pep8: E302 expected 2 blank lines, found 0","commit_id":"a551cc50399aa3d339630a0ae27475d8267d97cb"}],"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":"08a81277a719b505b27b64d63309a47d33fb7204","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                                     \u0027X-Amz-Checksum-Type\u0027: \u0027full_object\u0027})"},{"line_number":2755,"context_line":""},{"line_number":2756,"context_line":"        with mock.patch.object(checksum, \u0027crc32_combine_anycrc\u0027, None):"},{"line_number":2757,"context_line":"            with self.assertRaises(S3NotImplemented) as cm:"},{"line_number":2758,"context_line":"                S3Request(req.environ)"},{"line_number":2759,"context_line":""},{"line_number":2760,"context_line":"    def test_mpu_initiate_crc32_default_checksum_type(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"b42872f5_b956589b","line":2757,"updated":"2026-07-09 20:01:56.000000000","message":"pep8: F841 local variable \u0027cm\u0027 is assigned to but never used","commit_id":"df9bf10e437b774377aac9b82baa23db71d81905"}]}
