)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c1255c9ff21f36d0011ec7457c21d6c363118d2a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: Add support for crc64nvme checksum calculation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia05e5677a8ca89a62b142078abfb7371b1badd3f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3cec2dbf_bf8a000b","line":9,"updated":"2025-04-02 14:37:58.000000000","message":"should add co-authored-by Tim","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1416a56fbe241908ebc284d4f37201e48e81de0f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: Add support for crc64nvme checksum calculation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia05e5677a8ca89a62b142078abfb7371b1badd3f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"12584b8f_8a17a3ff","line":9,"in_reply_to":"3cec2dbf_bf8a000b","updated":"2025-04-28 21:38:17.000000000","message":"Done","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"254922fadf8119d4a27bff48a75153c6a9af2c40","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"s3api: Add support for crc64nvme checksum calculation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia05e5677a8ca89a62b142078abfb7371b1badd3f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9d3441b5_dbc9db1a","line":9,"in_reply_to":"3cec2dbf_bf8a000b","updated":"2025-07-10 17:24:17.000000000","message":"Done","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c1255c9ff21f36d0011ec7457c21d6c363118d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f1bc0e4c_5d0fb500","updated":"2025-04-02 14:37:58.000000000","message":"This is just replacing the crc64nvme stuff that was previously removed","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"34495246990891518db7c733754ac32bdc678e62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c89f3229_a016f890","updated":"2025-04-02 17:14:11.000000000","message":"We could remove the try/except NotImplementedError in s3Request _get_checksum_hasher() now all expected hashers are supported :shrug:","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"853b8e4598f670cf79eda164f24a94a1e87503e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"53a493ef_9bddfc41","updated":"2025-04-02 21:18:42.000000000","message":"we should probably mark this wip/dnm","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"65ada7e64dafeb00214276d041cbe7697c30fec6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e9a46824_4e35192f","updated":"2025-04-09 19:08:24.000000000","message":"getting this all figured out in a way we can reliably deliver support for crc64nvme without setting up a footgun for deployers on old/vendored distros that can\u0027t \"easily\" get an upstream/modern isa-l installed is our next biggest priority for aws-chunked.\n\nI defer to Al and Tim if we \"need\" to get anycrc, or if we can \"just\" raise an error on nvme64 if not isa-l, or if there\u0027s another way?\n\nIs this WIP because of a known blocking issue?  Like... \"there\u0027s no way to NOT allow slow-crc64nvme if you deploy this\" i.e. \"install isa-l THEN upgrade swift\"","commit_id":"d6ecd4bca5a1efd72402a2030425f9c3aca98ad4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bde74752aa8b68da450a0994e0f101b24b4fff67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"2a88c1c7_b2217458","updated":"2025-06-18 01:18:11.000000000","message":"recheck\n\nTimeout and log-upload failures?","commit_id":"6bd599f6e292a3af967dd74c2ef563e2e64764b7"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"88f405c70239db89b1e2875a8621e35aaf11745c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"f8b760c6_5d06bfdc","updated":"2025-07-18 03:19:43.000000000","message":"LGTM","commit_id":"404e1f273260cde0040fb6cecd2566aa295b4fec"}],"swift/common/utils/checksum.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"853b8e4598f670cf79eda164f24a94a1e87503e4","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"if _select_crc64nvme_impl() is crc64nvme_ref:"},{"line_number":161,"context_line":"    warnings.warn(\u0027Using (slow) reference implementation for CRC64-NVME; \u0027"},{"line_number":162,"context_line":"                  \u0027install ISA-L for faster checksums.\u0027, RuntimeWarning)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class CRCHasher(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"2548addb_6a296e79","line":162,"updated":"2025-04-02 21:18:42.000000000","message":"I think making this warning an import side effect is a bit noisy; seeing swift-ring-builder print this out was annoying, but perhaps helpful in raising visibility of the issue\n\nmaybe by the time we get anycrc there no \"warning\" to speak of; I can understand the reasoning for not wanting to wait until we call `_select_crc64nvme_impl()` in `crc64nvme` and probably not on every requests with `x-amz-checksum-crc64nvme` header either...\n\nthe compromise might be having s3api do this validation when it creates the filter in the pipeline for the proxy app: hey, i\u0027m a mw in your pipeline, i\u0027m going to use this dog-slow python-reference version and you\u0027ll probably need to rollback or install something.  Which alternatively might also be a good time to refuse to start unless we monkeypatched or configured `s3api.allow_slow_crc_ref_for_tests_only \u003d True` or something.","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"67436f2cf127c2807a88d464c6e8a8a3b2085791","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"if _select_crc64nvme_impl() is crc64nvme_ref:"},{"line_number":161,"context_line":"    warnings.warn(\u0027Using (slow) reference implementation for CRC64-NVME; \u0027"},{"line_number":162,"context_line":"                  \u0027install ISA-L for faster checksums.\u0027, RuntimeWarning)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class CRCHasher(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7050a01d_9b00d3e5","line":162,"in_reply_to":"2548addb_6a296e79","updated":"2025-04-03 05:12:46.000000000","message":"Do we ever want the `object-auditor` to validate checksums? I suppose it could do a similar check... or we even pull it back into here as some `warn_about_slow_implementations()` helper...","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"65ada7e64dafeb00214276d041cbe7697c30fec6","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"if _select_crc64nvme_impl() is crc64nvme_ref:"},{"line_number":161,"context_line":"    warnings.warn(\u0027Using (slow) reference implementation for CRC64-NVME; \u0027"},{"line_number":162,"context_line":"                  \u0027install ISA-L for faster checksums.\u0027, RuntimeWarning)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class CRCHasher(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"68c7fe74_0747c6bd","line":162,"in_reply_to":"68959c41_d3bea544","updated":"2025-04-09 19:08:24.000000000","message":"If we don\u0027t like the \"process must explicitly opt-in to warnings\" approach we could catch a \"is_using_ref_and_has_never_logged\" global when you create any checksum and do it automatically and lazily\n\nI think it\u0027s all still slightly better than as an import side-effect; *except* I don\u0027t think we should ever really allow a \"warning: slow\" situation, more like \"error: slow; plsfix\"\n\nDoes this get sorted out if we add an ayncrc dependency?","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9a4614c22112a1ce8b6d22ad28400a9da804a4e9","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"if _select_crc64nvme_impl() is crc64nvme_ref:"},{"line_number":161,"context_line":"    warnings.warn(\u0027Using (slow) reference implementation for CRC64-NVME; \u0027"},{"line_number":162,"context_line":"                  \u0027install ISA-L for faster checksums.\u0027, RuntimeWarning)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class CRCHasher(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c6c5acc6_5981d4cb","line":162,"in_reply_to":"68c7fe74_0747c6bd","updated":"2025-05-12 18:42:39.000000000","message":"crc64nvme requests now 501 if you have neither isa-l nor anycrc available.","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bcbef92f0ee3d564b0718286183a7796dfeb68aa","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"if _select_crc64nvme_impl() is crc64nvme_ref:"},{"line_number":161,"context_line":"    warnings.warn(\u0027Using (slow) reference implementation for CRC64-NVME; \u0027"},{"line_number":162,"context_line":"                  \u0027install ISA-L for faster checksums.\u0027, RuntimeWarning)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class CRCHasher(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"68959c41_d3bea544","line":162,"in_reply_to":"7050a01d_9b00d3e5","updated":"2025-04-03 14:55:42.000000000","message":"See https://review.opendev.org/c/openstack/swift/+/946239?usp\u003demail","commit_id":"849a7642b4e78edcf260f007e35bc1418729099d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"65ada7e64dafeb00214276d041cbe7697c30fec6","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    def crc32c_kern(data, value\u003d0):"},{"line_number":87,"context_line":"        crc32c_sock \u003d socket.socket(AF_ALG, socket.SOCK_SEQPACKET)"},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            crc32c_sock.bind((\"hash\", \"crc32c\"))"},{"line_number":90,"context_line":"            crc32c_sock.setsockopt("},{"line_number":91,"context_line":"                socket.SOL_ALG,"},{"line_number":92,"context_line":"                socket.ALG_SET_KEY,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfadd227_05ee8186","line":89,"updated":"2025-04-09 19:08:24.000000000","message":"I wish I understood why this trick doesn\u0027t work for crc64nvme\n\nhttps://github.com/torvalds/linux/blob/master/include/linux/crc64.h","commit_id":"d6ecd4bca5a1efd72402a2030425f9c3aca98ad4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"254922fadf8119d4a27bff48a75153c6a9af2c40","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    def crc32c_kern(data, value\u003d0):"},{"line_number":87,"context_line":"        crc32c_sock \u003d socket.socket(AF_ALG, socket.SOCK_SEQPACKET)"},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            crc32c_sock.bind((\"hash\", \"crc32c\"))"},{"line_number":90,"context_line":"            crc32c_sock.setsockopt("},{"line_number":91,"context_line":"                socket.SOL_ALG,"},{"line_number":92,"context_line":"                socket.ALG_SET_KEY,"}],"source_content_type":"text/x-python","patch_set":4,"id":"10a90aad_9fe05cd1","line":89,"in_reply_to":"354af60d_c8c389f7","updated":"2025-07-10 17:24:17.000000000","message":"Done","commit_id":"d6ecd4bca5a1efd72402a2030425f9c3aca98ad4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"12b75086d0f264ce940943b747bd292206b28a96","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    def crc32c_kern(data, value\u003d0):"},{"line_number":87,"context_line":"        crc32c_sock \u003d socket.socket(AF_ALG, socket.SOCK_SEQPACKET)"},{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            crc32c_sock.bind((\"hash\", \"crc32c\"))"},{"line_number":90,"context_line":"            crc32c_sock.setsockopt("},{"line_number":91,"context_line":"                socket.SOL_ALG,"},{"line_number":92,"context_line":"                socket.ALG_SET_KEY,"}],"source_content_type":"text/x-python","patch_set":4,"id":"354af60d_c8c389f7","line":89,"in_reply_to":"bfadd227_05ee8186","updated":"2025-04-14 03:55:11.000000000","message":"It doesn\u0027t support setting the current value -- that `crc32c_sock.setsockopt( socket.SOL_ALG, socket.ALG_SET_KEY, ...)` bombs out.","commit_id":"d6ecd4bca5a1efd72402a2030425f9c3aca98ad4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4fb30f4aacf50c217fc1cd2f74186f91e3181af2","unresolved":true,"context_lines":[{"line_number":120,"context_line":"else:"},{"line_number":121,"context_line":"    crc64nvme_anycrc \u003d None"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"if hasattr(isal, \u0027crc64_rocksoft_refl\u0027):  # isa-l \u003e\u003d 2.31.0"},{"line_number":124,"context_line":"    isal.crc64_rocksoft_refl.argtypes \u003d ["},{"line_number":125,"context_line":"        ctypes.c_uint64, ctypes.c_char_p, ctypes.c_uint64]"},{"line_number":126,"context_line":"    isal.crc64_rocksoft_refl.restype \u003d ctypes.c_uint64"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fc615b7_ed9d81db","line":123,"range":{"start_line":123,"start_character":44,"end_line":123,"end_character":59},"updated":"2025-07-09 18:27:11.000000000","message":"Man, I love that I got pyeclib wheels bundling isa-l -- every binary wheel we\u0027ve put on PyPI meets this requirement.\n\nI\u0027m going to keep an eye out for their 2.32.0 release (which will include [some optimizations for crc64_rocksoft for aarch64](https://github.com/intel/isa-l/commit/9a6c32cb057789c7609acadcf8eb8b8818fe324d)) so I can bump the version packed in the wheel. Not that the base C implementation is *terrible* on arm; IIRC it\u0027s roughly on par with anycrc\u0027s (which makes sense).","commit_id":"9c7e7b0bf073620fc8f68f14c8831bf763be33bc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"254922fadf8119d4a27bff48a75153c6a9af2c40","unresolved":false,"context_lines":[{"line_number":120,"context_line":"else:"},{"line_number":121,"context_line":"    crc64nvme_anycrc \u003d None"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"if hasattr(isal, \u0027crc64_rocksoft_refl\u0027):  # isa-l \u003e\u003d 2.31.0"},{"line_number":124,"context_line":"    isal.crc64_rocksoft_refl.argtypes \u003d ["},{"line_number":125,"context_line":"        ctypes.c_uint64, ctypes.c_char_p, ctypes.c_uint64]"},{"line_number":126,"context_line":"    isal.crc64_rocksoft_refl.restype \u003d ctypes.c_uint64"}],"source_content_type":"text/x-python","patch_set":24,"id":"f09bc496_a1cf6956","line":123,"range":{"start_line":123,"start_character":44,"end_line":123,"end_character":59},"in_reply_to":"9fc615b7_ed9d81db","updated":"2025-07-10 17:24:17.000000000","message":"Acknowledged","commit_id":"9c7e7b0bf073620fc8f68f14c8831bf763be33bc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"39b27c55757cd70605fd4a7626f092babcef682a","unresolved":true,"context_lines":[{"line_number":115,"context_line":"    return selected"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"if anycrc:"},{"line_number":119,"context_line":"    crc64nvme_anycrc \u003d anycrc.Model(\u0027CRC64-NVME\u0027).calc"},{"line_number":120,"context_line":"else:"},{"line_number":121,"context_line":"    crc64nvme_anycrc \u003d None"}],"source_content_type":"text/x-python","patch_set":25,"id":"42a62844_4ee3dabf","line":118,"updated":"2025-07-16 04:57:06.000000000","message":"combine this block L118:L121 with the previous anycrc selection block L35:L38","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3afa7949fd383ca3a73d2578e13a26693c1d4e29","unresolved":true,"context_lines":[{"line_number":115,"context_line":"    return selected"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"if anycrc:"},{"line_number":119,"context_line":"    crc64nvme_anycrc \u003d anycrc.Model(\u0027CRC64-NVME\u0027).calc"},{"line_number":120,"context_line":"else:"},{"line_number":121,"context_line":"    crc64nvme_anycrc \u003d None"}],"source_content_type":"text/x-python","patch_set":25,"id":"cf9211c1_1d156f11","line":118,"in_reply_to":"42a62844_4ee3dabf","updated":"2025-07-16 16:52:29.000000000","message":"ok\n\nI think the flow of the file was \u0027crc32 stuff followed by crc64nvme stuff\u0027, so the repeated ``if anycrc`` made sense, but equally intuitive might be to reorder to \u0027anycrc provided stuff followed by isal provided stuff followed by kernel provided\u0027","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1e1bacbedcd6c5383be70813f61b993eb20fb255","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    return selected"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"if anycrc:"},{"line_number":119,"context_line":"    crc64nvme_anycrc \u003d anycrc.Model(\u0027CRC64-NVME\u0027).calc"},{"line_number":120,"context_line":"else:"},{"line_number":121,"context_line":"    crc64nvme_anycrc \u003d None"}],"source_content_type":"text/x-python","patch_set":25,"id":"5bc1051d_ba975d3e","line":118,"in_reply_to":"cf9211c1_1d156f11","updated":"2025-07-17 16:33:27.000000000","message":"Done","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"39b27c55757cd70605fd4a7626f092babcef682a","unresolved":true,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def digest(self):"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        Return the current CRC value as a 4-byte big-endian integer."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        :returns: Packed CRC value. (bytes)"},{"line_number":190,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"227b3def_192fe75d","line":187,"updated":"2025-07-16 04:57:06.000000000","message":"need change to\n``Return the current CRC value as a 4-byte big-endian integer for CRC32, 8-byte for CRC64``","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3afa7949fd383ca3a73d2578e13a26693c1d4e29","unresolved":true,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def digest(self):"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        Return the current CRC value as a 4-byte big-endian integer."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        :returns: Packed CRC value. (bytes)"},{"line_number":190,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"60b1860b_03512255","line":187,"in_reply_to":"227b3def_192fe75d","updated":"2025-07-16 16:52:29.000000000","message":"``4-byte `` is obviously CRC32 specific, but perhaps this generic class should just describe the bytes size in terms of ``width / 8``","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1e1bacbedcd6c5383be70813f61b993eb20fb255","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def digest(self):"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        Return the current CRC value as a 4-byte big-endian integer."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        :returns: Packed CRC value. (bytes)"},{"line_number":190,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"162c56d3_fdfcb788","line":187,"in_reply_to":"60b1860b_03512255","updated":"2025-07-17 16:33:27.000000000","message":"Done","commit_id":"44cc2c2309d3ce701db9b53d03fecdbae494a134"}],"test/s3api/test_object_checksums.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dc796273d1d9c63d97d823013bc62833d4dfbffb","unresolved":true,"context_lines":[{"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])"},{"line_number":193,"context_line":"        upload_id \u003d create_mpu_resp[\u0027UploadId\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"ef8628be_9f97ba64","line":190,"updated":"2025-05-13 19:22:29.000000000","message":"This guy fails on AWS with\n```\nAn error occurred (InvalidRequest) when calling the CreateMultipartUpload operation:\nThe COMPOSITE checksum type cannot be used with the crc64nvme checksum algorithm.\n```","commit_id":"f04d9ae602c81d6296bdc5baca8d9f86491e441d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c663ec395b0aebc00989bf3a73506ea7ca4e1605","unresolved":false,"context_lines":[{"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])"},{"line_number":193,"context_line":"        upload_id \u003d create_mpu_resp[\u0027UploadId\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"dbe436d5_cd8cfef4","line":190,"in_reply_to":"ef8628be_9f97ba64","updated":"2025-05-20 19:10:01.000000000","message":"Done","commit_id":"f04d9ae602c81d6296bdc5baca8d9f86491e441d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4fb30f4aacf50c217fc1cd2f74186f91e3181af2","unresolved":true,"context_lines":[{"line_number":195,"context_line":"                # crc64nvme only allows full-object"},{"line_number":196,"context_line":"                checksum_kwargs[\u0027ChecksumType\u0027] \u003d \u0027FULL_OBJECT\u0027"},{"line_number":197,"context_line":"            else:"},{"line_number":198,"context_line":"                checksum_kwargs[\u0027ChecksumType\u0027] \u003d \u0027COMPOSITE\u0027"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":201,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("}],"source_content_type":"text/x-python","patch_set":24,"id":"07ab94c9_16a17692","line":198,"updated":"2025-07-09 18:27:11.000000000","message":"I feel like we had this check (in s3request? in controllers/multi_upload?) at some point in some patch chain -- but at any rate, it\u0027s not here any more...\n\nMaybe it\u0027s something that ought to wait until we\u0027re actually writing things down, though.","commit_id":"9c7e7b0bf073620fc8f68f14c8831bf763be33bc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3afa7949fd383ca3a73d2578e13a26693c1d4e29","unresolved":true,"context_lines":[{"line_number":195,"context_line":"                # crc64nvme only allows full-object"},{"line_number":196,"context_line":"                checksum_kwargs[\u0027ChecksumType\u0027] \u003d \u0027FULL_OBJECT\u0027"},{"line_number":197,"context_line":"            else:"},{"line_number":198,"context_line":"                checksum_kwargs[\u0027ChecksumType\u0027] \u003d \u0027COMPOSITE\u0027"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        obj_name \u003d self.create_name(self.ALGORITHM + \u0027-mpu-complete-good\u0027)"},{"line_number":201,"context_line":"        create_mpu_resp \u003d self.client.create_multipart_upload("}],"source_content_type":"text/x-python","patch_set":24,"id":"5eb69cfc_6186bafa","line":198,"in_reply_to":"07ab94c9_16a17692","updated":"2025-07-16 16:52:29.000000000","message":"It seems that boto just sends the correct ChecksumType for the algo, but under the hood crc64nvme doesn\u0027t support COMPOSITE and so it\u0027s an error to force that\n\n```\nbotocore.errorfactory.InvalidRequest: An error occurred (InvalidRequest) when calling the CreateMultipartUpload operation: The COMPOSITE checksum type cannot be used with the crc64nvme checksum algorithm.\n\n\nFAILED test/s3api/test_object_checksums.py::TestObjectChecksumCRC64NVME::test_mpu_complete_good_checksum - botocore.errorfactory.Invali...\n```\n\nHowever, I\u0027m going to leave this as it is but perhaps it is helpful to remind us that there is a difference under the hood, even if Swift ignores it anyway for the time being.","commit_id":"9c7e7b0bf073620fc8f68f14c8831bf763be33bc"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"88f405c70239db89b1e2875a8621e35aaf11745c","unresolved":true,"context_lines":[{"line_number":255,"context_line":"                                  BaseS3TestCaseWithBucket):"},{"line_number":256,"context_line":"    ALGORITHM \u003d \u0027CRC64NVME\u0027"},{"line_number":257,"context_line":"    EXPECTED \u003d \u0027rosUhgp5mIg\u003d\u0027"},{"line_number":258,"context_line":"    INVALID \u003d \u0027rosUhgp5mIh\u003d\u0027"},{"line_number":259,"context_line":"    BAD \u003d \u0027sosUhgp5mIg\u003d\u0027"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"36ecc2b4_100082c9","line":258,"updated":"2025-07-18 03:19:43.000000000","message":"this is INVALID because of base64 string decoding and re-encoding","commit_id":"404e1f273260cde0040fb6cecd2566aa295b4fec"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1bcdf136d18880804d195a51e5e14ab8bb7b98be","unresolved":true,"context_lines":[{"line_number":2900,"context_line":"            with self.assertRaises(s3response.S3NotImplemented):"},{"line_number":2901,"context_line":"                _get_checksum_hasher(\u0027x-amz-checksum-%s\u0027 % crc)"},{"line_number":2902,"context_line":""},{"line_number":2903,"context_line":"        do_test(\u0027crc64nvme\u0027)"},{"line_number":2904,"context_line":"        do_test(\u0027nonsense\u0027)"},{"line_number":2905,"context_line":"        do_test(\u0027\u0027)"},{"line_number":2906,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"795fb1ad_350f7b3a","line":2903,"updated":"2025-06-17 16:08:13.000000000","message":"Oh hey, this needs updating -- either\n- we patch to ensure it looks like `crc64nvme` is missing, or\n- we move this up to (sometimes?) get checked in `test_get_checksum_hasher`, or\n- we just drop it.","commit_id":"bfe38710b18ccd99125d6064df26f088a6ee54c0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bde74752aa8b68da450a0994e0f101b24b4fff67","unresolved":false,"context_lines":[{"line_number":2900,"context_line":"            with self.assertRaises(s3response.S3NotImplemented):"},{"line_number":2901,"context_line":"                _get_checksum_hasher(\u0027x-amz-checksum-%s\u0027 % crc)"},{"line_number":2902,"context_line":""},{"line_number":2903,"context_line":"        do_test(\u0027crc64nvme\u0027)"},{"line_number":2904,"context_line":"        do_test(\u0027nonsense\u0027)"},{"line_number":2905,"context_line":"        do_test(\u0027\u0027)"},{"line_number":2906,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7bdb6682_ecb408ba","line":2903,"in_reply_to":"795fb1ad_350f7b3a","updated":"2025-06-18 01:18:11.000000000","message":"Done","commit_id":"bfe38710b18ccd99125d6064df26f088a6ee54c0"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"88f405c70239db89b1e2875a8621e35aaf11745c","unresolved":true,"context_lines":[{"line_number":2009,"context_line":"               \u00277\\r\\nuvwxyz\\n\\r\\n\u0027 \\"},{"line_number":2010,"context_line":"               \u00270\\r\\n\u0027"},{"line_number":2011,"context_line":"        crc \u003d base64.b64encode("},{"line_number":2012,"context_line":"            checksum.crc64nvme(b\u0027abcdefghijklmnopqrstuvwxyz\\n\u0027).digest())"},{"line_number":2013,"context_line":"        req \u003d self._make_sig_v4_streaming_unsigned_payload_trailer_req("},{"line_number":2014,"context_line":"            body\u003dbody,"},{"line_number":2015,"context_line":"            extra_headers\u003d{\u0027x-amz-checksum-crc64nvme\u0027: crc}"}],"source_content_type":"text/x-python","patch_set":26,"id":"445bf85c_2410e1d9","line":2012,"updated":"2025-07-18 03:19:43.000000000","message":"``b\u0027abcdefghijklmnopqrstuvwxyz\\n\u0027`` is the full decoded payload","commit_id":"404e1f273260cde0040fb6cecd2566aa295b4fec"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"88f405c70239db89b1e2875a8621e35aaf11745c","unresolved":true,"context_lines":[{"line_number":2015,"context_line":"            extra_headers\u003d{\u0027x-amz-checksum-crc64nvme\u0027: crc}"},{"line_number":2016,"context_line":"        )"},{"line_number":2017,"context_line":"        sigv4_req \u003d SigV4Request(req.environ)"},{"line_number":2018,"context_line":"        self.assertEqual(b\u0027abcdefghijklmnopqrstuvwxyz\\n\u0027,"},{"line_number":2019,"context_line":"                         sigv4_req.environ[\u0027wsgi.input\u0027].read())"},{"line_number":2020,"context_line":""},{"line_number":2021,"context_line":"    @requires_crc64nvme"}],"source_content_type":"text/x-python","patch_set":26,"id":"f22eeebd_6255f2e8","line":2018,"updated":"2025-07-18 03:19:43.000000000","message":"no ``S3InputChecksumMismatch`` raised, meaning the internal checksum checking passed.","commit_id":"404e1f273260cde0040fb6cecd2566aa295b4fec"}]}
