)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"70032226b9201e3b3f97ece51780e1bb2b7a03e4","unresolved":true,"context_lines":[{"line_number":22,"context_line":"validation. This provides flexibility for users who need different"},{"line_number":23,"context_line":"behavior for uploads vs downloads."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The implementation includes version compatibility for boto3 \u003c 1.36.0."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id87c3aa0d0d44a731cc5e2439e0b464bb92460a2"},{"line_number":28,"context_line":"Closes-Bug: #2121144"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df247839_5fa41137","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":69},"updated":"2025-12-03 16:27:26.000000000","message":"This is not at all a blocker but I\u0027m just curious to know why you want this (instead of bumping the min version).","commit_id":"9c97abf5089bf5c87570acd705c8643ce4a81d31"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"fe8a4421cc3c77b79e59811cf17c71405f9eb30f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"validation. This provides flexibility for users who need different"},{"line_number":23,"context_line":"behavior for uploads vs downloads."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The implementation includes version compatibility for boto3 \u003c 1.36.0."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id87c3aa0d0d44a731cc5e2439e0b464bb92460a2"},{"line_number":28,"context_line":"Closes-Bug: #2121144"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"8f58b927_7cfb6fda","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":69},"in_reply_to":"df247839_5fa41137","updated":"2025-12-04 03:05:46.000000000","message":"We could bump the version, but it\u0027s nice to not always require very recent versions of libraries (bot3 1.36.0 came out early 2025). This should make some packagers happy :)","commit_id":"9c97abf5089bf5c87570acd705c8643ce4a81d31"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"70032226b9201e3b3f97ece51780e1bb2b7a03e4","unresolved":true,"context_lines":[{"line_number":25,"context_line":"The implementation includes version compatibility for boto3 \u003c 1.36.0."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id87c3aa0d0d44a731cc5e2439e0b464bb92460a2"},{"line_number":28,"context_line":"Closes-Bug: #2121144"},{"line_number":29,"context_line":"Signed-off-by: Cyril Roelandt \u003ccyril@redhat.com\u003e"},{"line_number":30,"context_line":"Assisted-By: Claude"},{"line_number":31,"context_line":"Signed-off-by: Cyril Roelandt \u003ccyril@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7356fe25_a9124a02","line":29,"range":{"start_line":28,"start_character":20,"end_line":29,"end_character":48},"updated":"2025-12-03 16:27:26.000000000","message":"you can remove one of these.","commit_id":"9c97abf5089bf5c87570acd705c8643ce4a81d31"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"fe8a4421cc3c77b79e59811cf17c71405f9eb30f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"The implementation includes version compatibility for boto3 \u003c 1.36.0."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id87c3aa0d0d44a731cc5e2439e0b464bb92460a2"},{"line_number":28,"context_line":"Closes-Bug: #2121144"},{"line_number":29,"context_line":"Signed-off-by: Cyril Roelandt \u003ccyril@redhat.com\u003e"},{"line_number":30,"context_line":"Assisted-By: Claude"},{"line_number":31,"context_line":"Signed-off-by: Cyril Roelandt \u003ccyril@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"42ab3196_6b5696ca","line":29,"range":{"start_line":28,"start_character":20,"end_line":29,"end_character":48},"in_reply_to":"7356fe25_a9124a02","updated":"2025-12-04 03:05:46.000000000","message":"Oh, interesting, in some cases \"git commit --amend --signoff\" will duplicate the Signed-off-by line. I\u0027ll need to figure this out.","commit_id":"9c97abf5089bf5c87570acd705c8643ce4a81d31"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"dc1919c53ffcba1fcd1de1e735492b348cdcaeab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9b34c6ba_a98fa230","updated":"2025-09-03 05:56:56.000000000","message":"I know this is WIP but I think we need to make sure that this issue exists only for version 1.36.26 and fixed in later versions. Then instead of adding a configuration option we can internally check for the version and tweak these options accordingly.\n\nAlso if we decided to go with the config option then we also need to add few unit tests to verify the behaviour such as;\n\ntest_get_checksum_config_enabled\ntest_get_checksum_config_default_disabled\ntest_client_config_with_data_integrity_disabled\ntest_client_config_with_data_integrity_enabled\n\nI can help writing these if required.","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4be1662cf11a299f488734dd23be4dee16e51dfb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"de245959_46728356","in_reply_to":"016532f6_8f03e244","updated":"2025-09-03 14:29:39.000000000","message":"The other day I was chatting with masahito on IRC channel and concluded that issue is with 1.36.26 only. I have now asked him to confirm the same.","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f863038f67e87a05eb8da7f85bd573d05f0ebd92","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"016532f6_8f03e244","in_reply_to":"9b34c6ba_a98fa230","updated":"2025-09-03 14:25:44.000000000","message":"\u003e I know this is WIP but I think we need to make sure that this issue exists only for version 1.36.26 and fixed in later versions\n\nWhat makes you think that? I see nothing in https://github.com/boto/boto3/blob/develop/CHANGELOG.rst that indicates this new feature has been changed. They introduced it in 1.36.0 and it should still be there.","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"1616879f5b1760f17a0a280fd025b4b3fdb3cbf8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"56fec059_4759c604","in_reply_to":"de245959_46728356","updated":"2025-09-26 07:21:49.000000000","message":"I checked this problem happened with 1.40.x series, too, when Cryil asked to me to reproduce the bug with Flamingo release cycle. This problem happens as long as glance uses a S3 compatible API as its backend with Epoxy or later release.","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":37432,"name":"Koya Watanabe","display_name":"Koya Watanabe","email":"koywatan@lycorp.co.jp","username":"koya-watanabe"},"change_message_id":"9aab6168772f812bfffd75bca85777c12352f503","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"228a0c61_649a2d5d","updated":"2025-09-19 07:09:43.000000000","message":"@cyril@redhat.com I tested it in our environment where the bug was found and confirmed that this works correctly.\nI added the results in a comment here: https://bugs.launchpad.net/glance/+bug/2121144/comments/7","commit_id":"2fb439db8c54a06267507972370120cfb55613b9"},{"author":{"_account_id":37432,"name":"Koya Watanabe","display_name":"Koya Watanabe","email":"koywatan@lycorp.co.jp","username":"koya-watanabe"},"change_message_id":"efd9828ce2cdf014299f1dbd7437d8863966883b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1c93dd04_1ef056ff","updated":"2025-09-17 06:51:43.000000000","message":"https://bugs.launchpad.net/glance/+bug/2121144/comments/7","commit_id":"2fb439db8c54a06267507972370120cfb55613b9"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e6bad3c7_e167c5f6","updated":"2025-11-27 06:14:48.000000000","message":"I think we should also include releasenote for the same.","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"8405afa3c0cb4a0c00be950a11c99be42870195e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a6196137_2cfe961d","updated":"2026-02-17 21:50:52.000000000","message":"Code and tests look good; help text and release note are clear.","commit_id":"f217be1c8bbf2faf5d5ee49a2f3c6b2ce9c55001"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c060360b5729f09021f2e03a9114c118bcc98ef8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"11aa0f79_70b6a7a0","updated":"2025-12-08 15:31:51.000000000","message":"Looks good to me, everything is covered as defined in spec, thank you!","commit_id":"f217be1c8bbf2faf5d5ee49a2f3c6b2ce9c55001"}],"glance_store/_drivers/s3.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"dc1919c53ffcba1fcd1de1e735492b348cdcaeab","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"\"\"\"),"},{"line_number":245,"context_line":"    cfg.BoolOpt(\u0027s3_store_enable_data_integrity_protection\u0027,"},{"line_number":246,"context_line":"                default\u003d\u0027False\u0027,"},{"line_number":247,"context_line":"                help\u003d\"\"\""},{"line_number":248,"context_line":"Turn on S3 data integrity protections by enabling request checksum calculation"},{"line_number":249,"context_line":"and response checksum validation. Setting this to True is the same as setting"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a818004_7cd8128c","line":246,"range":{"start_line":246,"start_character":24,"end_line":246,"end_character":31},"updated":"2025-09-03 05:56:56.000000000","message":"I think this should be boolean and not string\nFalse","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f863038f67e87a05eb8da7f85bd573d05f0ebd92","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"\"\"\"),"},{"line_number":245,"context_line":"    cfg.BoolOpt(\u0027s3_store_enable_data_integrity_protection\u0027,"},{"line_number":246,"context_line":"                default\u003d\u0027False\u0027,"},{"line_number":247,"context_line":"                help\u003d\"\"\""},{"line_number":248,"context_line":"Turn on S3 data integrity protections by enabling request checksum calculation"},{"line_number":249,"context_line":"and response checksum validation. Setting this to True is the same as setting"}],"source_content_type":"text/x-python","patch_set":1,"id":"68465332_0dd59e90","line":246,"range":{"start_line":246,"start_character":24,"end_line":246,"end_character":31},"in_reply_to":"4a818004_7cd8128c","updated":"2025-09-03 14:25:44.000000000","message":"Done","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"dc1919c53ffcba1fcd1de1e735492b348cdcaeab","unresolved":true,"context_lines":[{"line_number":515,"context_line":"        session \u003d boto_session.Session(aws_access_key_id\u003dloc.accesskey,"},{"line_number":516,"context_line":"                                       aws_secret_access_key\u003dloc.secretkey)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"        if self._option_get(\u0027s3_store_enable_data_integrity_protection\u0027):"},{"line_number":519,"context_line":"            s3_data_integrity_protection \u003d \u0027when_supported\u0027"},{"line_number":520,"context_line":"        else:"},{"line_number":521,"context_line":"            s3_data_integrity_protection \u003d \u0027when_required\u0027"},{"line_number":522,"context_line":"        config \u003d boto_client.Config("},{"line_number":523,"context_line":"            s3\u003dcalling_format,"},{"line_number":524,"context_line":"            request_checksum_calculation\u003ds3_data_integrity_protection,"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c6cca3d_89550fe9","line":521,"range":{"start_line":518,"start_character":8,"end_line":521,"end_character":58},"updated":"2025-09-03 05:56:56.000000000","message":"you can simplify this \n```\ns3_data_integrity_protection \u003d \u0027when_required\u0027\nif self._option_get(\u0027s3_store_enable_data_integrity_protection\u0027):\n    s3_data_integrity_protection \u003d \u0027when_supported\u0027\n```","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f863038f67e87a05eb8da7f85bd573d05f0ebd92","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        session \u003d boto_session.Session(aws_access_key_id\u003dloc.accesskey,"},{"line_number":516,"context_line":"                                       aws_secret_access_key\u003dloc.secretkey)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"        if self._option_get(\u0027s3_store_enable_data_integrity_protection\u0027):"},{"line_number":519,"context_line":"            s3_data_integrity_protection \u003d \u0027when_supported\u0027"},{"line_number":520,"context_line":"        else:"},{"line_number":521,"context_line":"            s3_data_integrity_protection \u003d \u0027when_required\u0027"},{"line_number":522,"context_line":"        config \u003d boto_client.Config("},{"line_number":523,"context_line":"            s3\u003dcalling_format,"},{"line_number":524,"context_line":"            request_checksum_calculation\u003ds3_data_integrity_protection,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f47b030_87322165","line":521,"range":{"start_line":518,"start_character":8,"end_line":521,"end_character":58},"in_reply_to":"8c6cca3d_89550fe9","updated":"2025-09-03 14:25:44.000000000","message":"Done","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c52a4a0dac9a1c547a864762b7e9fcac74463bb8","unresolved":true,"context_lines":[{"line_number":262,"context_line":"    * s3_store_response_checksum_validation"},{"line_number":263,"context_line":"\"\"\"),"},{"line_number":264,"context_line":"    cfg.StrOpt(\u0027s3_store_request_checksum_calculation\u0027,"},{"line_number":265,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":266,"context_line":"               help\u003d\"\"\""},{"line_number":267,"context_line":"Controls when checksums are calculated for S3 upload requests."},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"09c0eae9_fad7cc61","line":265,"updated":"2025-11-27 04:23:06.000000000","message":"```suggestion\n               default\u003d\u0027when_required\u0027,\n               choices\u003d[\u0027when_required\u0027, \u0027when_supported\u0027],\n```\n\nCan we add the choices property to reject anything unsupported ?\nside note: we might want to define constants somewhere in the file and use it.","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":true,"context_lines":[{"line_number":262,"context_line":"    * s3_store_response_checksum_validation"},{"line_number":263,"context_line":"\"\"\"),"},{"line_number":264,"context_line":"    cfg.StrOpt(\u0027s3_store_request_checksum_calculation\u0027,"},{"line_number":265,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":266,"context_line":"               help\u003d\"\"\""},{"line_number":267,"context_line":"Controls when checksums are calculated for S3 upload requests."},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fcf608e9_0b118184","line":265,"in_reply_to":"09c0eae9_fad7cc61","updated":"2025-11-27 06:14:48.000000000","message":"+1","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfdda782cd086be7c1e4af26e567303687acb8f8","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    * s3_store_response_checksum_validation"},{"line_number":263,"context_line":"\"\"\"),"},{"line_number":264,"context_line":"    cfg.StrOpt(\u0027s3_store_request_checksum_calculation\u0027,"},{"line_number":265,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":266,"context_line":"               help\u003d\"\"\""},{"line_number":267,"context_line":"Controls when checksums are calculated for S3 upload requests."},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"905343ee_306d29e1","line":265,"in_reply_to":"fcf608e9_0b118184","updated":"2025-12-03 15:08:57.000000000","message":"Done","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c52a4a0dac9a1c547a864762b7e9fcac74463bb8","unresolved":true,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\"\"\"),"},{"line_number":286,"context_line":"    cfg.StrOpt(\u0027s3_store_response_checksum_validation\u0027,"},{"line_number":287,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":288,"context_line":"               help\u003d\"\"\""},{"line_number":289,"context_line":"Controls when checksums are validated for S3 download responses."},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"10c6d063_88691ccf","line":287,"range":{"start_line":287,"start_character":15,"end_line":287,"end_character":39},"updated":"2025-11-27 04:23:06.000000000","message":"ditto. Can we add the choices property ?","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":true,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\"\"\"),"},{"line_number":286,"context_line":"    cfg.StrOpt(\u0027s3_store_response_checksum_validation\u0027,"},{"line_number":287,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":288,"context_line":"               help\u003d\"\"\""},{"line_number":289,"context_line":"Controls when checksums are validated for S3 download responses."},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"914f8119_027b084c","line":287,"range":{"start_line":287,"start_character":15,"end_line":287,"end_character":39},"in_reply_to":"10c6d063_88691ccf","updated":"2025-11-27 06:14:48.000000000","message":"+1","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfdda782cd086be7c1e4af26e567303687acb8f8","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\"\"\"),"},{"line_number":286,"context_line":"    cfg.StrOpt(\u0027s3_store_response_checksum_validation\u0027,"},{"line_number":287,"context_line":"               default\u003d\u0027when_required\u0027,"},{"line_number":288,"context_line":"               help\u003d\"\"\""},{"line_number":289,"context_line":"Controls when checksums are validated for S3 download responses."},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"61c74664_03ebec26","line":287,"range":{"start_line":287,"start_character":15,"end_line":287,"end_character":39},"in_reply_to":"914f8119_027b084c","updated":"2025-12-03 15:08:57.000000000","message":"Done","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":true,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        result \u003d getattr(store_conf, param)"},{"line_number":537,"context_line":"        if not result:"},{"line_number":538,"context_line":"            if param \u003d\u003d \u0027s3_store_create_bucket_on_put\u0027:"},{"line_number":539,"context_line":"                return result"},{"line_number":540,"context_line":"            if param \u003d\u003d \u0027s3_store_large_object_size\u0027:"},{"line_number":541,"context_line":"                return result"},{"line_number":542,"context_line":"            if param \u003d\u003d \u0027s3_store_region_name\u0027:"},{"line_number":543,"context_line":"                return result"},{"line_number":544,"context_line":"            if param \u003d\u003d \u0027s3_store_cacert\u0027:"},{"line_number":545,"context_line":"                return result"},{"line_number":546,"context_line":"            if param \u003d\u003d \u0027s3_store_enable_data_integrity_protection\u0027:"},{"line_number":547,"context_line":"                return result"},{"line_number":548,"context_line":"            if param \u003d\u003d \u0027s3_store_request_checksum_calculation\u0027:"},{"line_number":549,"context_line":"                return result"},{"line_number":550,"context_line":"            if param \u003d\u003d \u0027s3_store_response_checksum_validation\u0027:"},{"line_number":551,"context_line":"                return result"},{"line_number":552,"context_line":"            reason \u003d _(\"Could not find %s in configuration options.\") % param"},{"line_number":553,"context_line":"            LOG.error(reason)"},{"line_number":554,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"s3\","}],"source_content_type":"text/x-python","patch_set":3,"id":"2e3805f0_ba74580f","line":551,"range":{"start_line":538,"start_character":12,"end_line":551,"end_character":29},"updated":"2025-11-27 06:14:48.000000000","message":"nit\n\nInstead of having multiple if conditions, can we create a set of params and then check\n```\nOPTIONAL_PARAMS \u003d {\n    \u0027s3_store_create_bucket_on_put\u0027,\n    \u0027s3_store_large_object_size\u0027,\n    \u0027s3_store_region_name\u0027,\n    \u0027s3_store_cacert\u0027,\n    \u0027s3_store_enable_data_integrity_protection\u0027,\n    \u0027s3_store_request_checksum_calculation\u0027,\n    \u0027s3_store_response_checksum_validation\u0027,\n}\n\nif param in OPTIONAL_PARAMS:\n    return result\n```","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfdda782cd086be7c1e4af26e567303687acb8f8","unresolved":true,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        result \u003d getattr(store_conf, param)"},{"line_number":537,"context_line":"        if not result:"},{"line_number":538,"context_line":"            if param \u003d\u003d \u0027s3_store_create_bucket_on_put\u0027:"},{"line_number":539,"context_line":"                return result"},{"line_number":540,"context_line":"            if param \u003d\u003d \u0027s3_store_large_object_size\u0027:"},{"line_number":541,"context_line":"                return result"},{"line_number":542,"context_line":"            if param \u003d\u003d \u0027s3_store_region_name\u0027:"},{"line_number":543,"context_line":"                return result"},{"line_number":544,"context_line":"            if param \u003d\u003d \u0027s3_store_cacert\u0027:"},{"line_number":545,"context_line":"                return result"},{"line_number":546,"context_line":"            if param \u003d\u003d \u0027s3_store_enable_data_integrity_protection\u0027:"},{"line_number":547,"context_line":"                return result"},{"line_number":548,"context_line":"            if param \u003d\u003d \u0027s3_store_request_checksum_calculation\u0027:"},{"line_number":549,"context_line":"                return result"},{"line_number":550,"context_line":"            if param \u003d\u003d \u0027s3_store_response_checksum_validation\u0027:"},{"line_number":551,"context_line":"                return result"},{"line_number":552,"context_line":"            reason \u003d _(\"Could not find %s in configuration options.\") % param"},{"line_number":553,"context_line":"            LOG.error(reason)"},{"line_number":554,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"s3\","}],"source_content_type":"text/x-python","patch_set":3,"id":"7ec9afe1_9bdd9fa0","line":551,"range":{"start_line":538,"start_character":12,"end_line":551,"end_character":29},"in_reply_to":"2e3805f0_ba74580f","updated":"2025-12-03 15:08:57.000000000","message":"This would be great, but it\u0027s something for another patch. I\u0027ll follow up later.","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bd7dd34f9982d24e37ce9f3aaee70056dac36814","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        result \u003d getattr(store_conf, param)"},{"line_number":537,"context_line":"        if not result:"},{"line_number":538,"context_line":"            if param \u003d\u003d \u0027s3_store_create_bucket_on_put\u0027:"},{"line_number":539,"context_line":"                return result"},{"line_number":540,"context_line":"            if param \u003d\u003d \u0027s3_store_large_object_size\u0027:"},{"line_number":541,"context_line":"                return result"},{"line_number":542,"context_line":"            if param \u003d\u003d \u0027s3_store_region_name\u0027:"},{"line_number":543,"context_line":"                return result"},{"line_number":544,"context_line":"            if param \u003d\u003d \u0027s3_store_cacert\u0027:"},{"line_number":545,"context_line":"                return result"},{"line_number":546,"context_line":"            if param \u003d\u003d \u0027s3_store_enable_data_integrity_protection\u0027:"},{"line_number":547,"context_line":"                return result"},{"line_number":548,"context_line":"            if param \u003d\u003d \u0027s3_store_request_checksum_calculation\u0027:"},{"line_number":549,"context_line":"                return result"},{"line_number":550,"context_line":"            if param \u003d\u003d \u0027s3_store_response_checksum_validation\u0027:"},{"line_number":551,"context_line":"                return result"},{"line_number":552,"context_line":"            reason \u003d _(\"Could not find %s in configuration options.\") % param"},{"line_number":553,"context_line":"            LOG.error(reason)"},{"line_number":554,"context_line":"            raise exceptions.BadStoreConfiguration(store_name\u003d\"s3\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ef3b621f_db129d4f","line":551,"range":{"start_line":538,"start_character":12,"end_line":551,"end_character":29},"in_reply_to":"7ec9afe1_9bdd9fa0","updated":"2025-12-03 16:47:49.000000000","message":"Acknowledged","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":true,"context_lines":[{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        # Try to create Config with checksum parameters (boto3 \u003e\u003d 1.36.0)"},{"line_number":589,"context_line":"        # Fall back to Config without them for older versions"},{"line_number":590,"context_line":"        # NOTE: This try/except block should be removed and simplified to"},{"line_number":591,"context_line":"        # always pass the checksum parameters once we require boto3 \u003e\u003d 1.36.0"},{"line_number":592,"context_line":"        # in requirements.txt"},{"line_number":593,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"947f46ff_d295a63f","line":590,"range":{"start_line":590,"start_character":8,"end_line":590,"end_character":15},"updated":"2025-11-27 06:14:48.000000000","message":"We follow standard of # NOTE(irc nick)","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfdda782cd086be7c1e4af26e567303687acb8f8","unresolved":false,"context_lines":[{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        # Try to create Config with checksum parameters (boto3 \u003e\u003d 1.36.0)"},{"line_number":589,"context_line":"        # Fall back to Config without them for older versions"},{"line_number":590,"context_line":"        # NOTE: This try/except block should be removed and simplified to"},{"line_number":591,"context_line":"        # always pass the checksum parameters once we require boto3 \u003e\u003d 1.36.0"},{"line_number":592,"context_line":"        # in requirements.txt"},{"line_number":593,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3865c756_671b215b","line":590,"range":{"start_line":590,"start_character":8,"end_line":590,"end_character":15},"in_reply_to":"947f46ff_d295a63f","updated":"2025-12-03 15:08:57.000000000","message":"Done","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edd9c64a710398dcd0a31642aab2653aaa21bdbb","unresolved":true,"context_lines":[{"line_number":590,"context_line":"        # NOTE: This try/except block should be removed and simplified to"},{"line_number":591,"context_line":"        # always pass the checksum parameters once we require boto3 \u003e\u003d 1.36.0"},{"line_number":592,"context_line":"        # in requirements.txt"},{"line_number":593,"context_line":"        try:"},{"line_number":594,"context_line":"            config \u003d boto_client.Config("},{"line_number":595,"context_line":"                s3\u003dcalling_format,"},{"line_number":596,"context_line":"                request_checksum_calculation\u003drequest_checksum,"},{"line_number":597,"context_line":"                response_checksum_validation\u003dresponse_checksum,"},{"line_number":598,"context_line":"            )"},{"line_number":599,"context_line":"        except TypeError:"},{"line_number":600,"context_line":"            # boto3 \u003c 1.36.0 doesn\u0027t support these parameters"},{"line_number":601,"context_line":"            LOG.warning(\"boto3 version does not support checksum control \""},{"line_number":602,"context_line":"                        \"parameters. Upgrade to boto3 \u003e\u003d 1.36.0 to use \""},{"line_number":603,"context_line":"                        \"s3_store_enable_data_integrity_protection and \""},{"line_number":604,"context_line":"                        \"fine-grained checksum options.\")"},{"line_number":605,"context_line":"            config \u003d boto_client.Config(s3\u003dcalling_format)"},{"line_number":606,"context_line":"        location \u003d get_s3_location(s3_host)"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        bucket_name \u003d loc.bucket"}],"source_content_type":"text/x-python","patch_set":3,"id":"f951a275_727c9e34","line":605,"range":{"start_line":593,"start_character":0,"end_line":605,"end_character":58},"updated":"2025-11-27 06:14:48.000000000","message":"I think we need unit test to cover this part. Also better to have a test for nabled/disabled data integrity protection if possible","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"bfdda782cd086be7c1e4af26e567303687acb8f8","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        # NOTE: This try/except block should be removed and simplified to"},{"line_number":591,"context_line":"        # always pass the checksum parameters once we require boto3 \u003e\u003d 1.36.0"},{"line_number":592,"context_line":"        # in requirements.txt"},{"line_number":593,"context_line":"        try:"},{"line_number":594,"context_line":"            config \u003d boto_client.Config("},{"line_number":595,"context_line":"                s3\u003dcalling_format,"},{"line_number":596,"context_line":"                request_checksum_calculation\u003drequest_checksum,"},{"line_number":597,"context_line":"                response_checksum_validation\u003dresponse_checksum,"},{"line_number":598,"context_line":"            )"},{"line_number":599,"context_line":"        except TypeError:"},{"line_number":600,"context_line":"            # boto3 \u003c 1.36.0 doesn\u0027t support these parameters"},{"line_number":601,"context_line":"            LOG.warning(\"boto3 version does not support checksum control \""},{"line_number":602,"context_line":"                        \"parameters. Upgrade to boto3 \u003e\u003d 1.36.0 to use \""},{"line_number":603,"context_line":"                        \"s3_store_enable_data_integrity_protection and \""},{"line_number":604,"context_line":"                        \"fine-grained checksum options.\")"},{"line_number":605,"context_line":"            config \u003d boto_client.Config(s3\u003dcalling_format)"},{"line_number":606,"context_line":"        location \u003d get_s3_location(s3_host)"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"        bucket_name \u003d loc.bucket"}],"source_content_type":"text/x-python","patch_set":3,"id":"6a899a87_973136bc","line":605,"range":{"start_line":593,"start_character":0,"end_line":605,"end_character":58},"in_reply_to":"f951a275_727c9e34","updated":"2025-12-03 15:08:57.000000000","message":"Done","commit_id":"4fd79104a55fa0f7d5054b26d81e1a6aa3c4381b"}],"glance_store/tests/unit/test_multistore_s3.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"dc1919c53ffcba1fcd1de1e735492b348cdcaeab","unresolved":true,"context_lines":[{"line_number":108,"context_line":"                        \u0027s3_store_large_object_size\u0027"},{"line_number":109,"context_line":"                    ],"},{"line_number":110,"context_line":"                    s3_store_large_object_chunk_size\u003d6,"},{"line_number":111,"context_line":"                    s3_store_enable_data_integrity_protection\u003dFalse)"},{"line_number":112,"context_line":"        # Ensure stores + locations cleared"},{"line_number":113,"context_line":"        location.SCHEME_TO_CLS_BACKEND_MAP \u003d {}"},{"line_number":114,"context_line":"        store.create_multi_stores(self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a990b24_5b341f07","line":111,"updated":"2025-09-03 05:56:56.000000000","message":"May be an additional test to verify this, something like\n\n```\ndef test_multiple_store_configurations(self):\n        \"\"\"Test that different stores can have different data integrity settings.\"\"\"\n        # Configure multiple S3 stores with different settings\n        self.config(group\u003d\u0027s3_store1\u0027,\n                   s3_store_access_key\u003d\u0027user1\u0027,\n                   s3_store_secret_key\u003d\u0027key1\u0027,\n                   s3_store_host\u003d\u0027localhost1\u0027,\n                   s3_store_bucket\u003d\u0027bucket1\u0027,\n                   s3_store_enable_data_integrity_protection\u003dTrue)\n        \n        self.config(group\u003d\u0027s3_store2\u0027,\n                   s3_store_access_key\u003d\u0027user2\u0027,\n                   s3_store_secret_key\u003d\u0027key2\u0027,\n                   s3_store_host\u003d\u0027localhost2\u0027,\n                   s3_store_bucket\u003d\u0027bucket2\u0027,\n                   s3_store_enable_data_integrity_protection\u003dFalse)\n        \n        # Create separate store instances\n        store1 \u003d s3.Store(self.conf, backend_group\u003d\u0027s3_store1\u0027)\n        store2 \u003d s3.Store(self.conf, backend_group\u003d\u0027s3_store2\u0027)\n        \n        store1.configure()\n        store2.configure()\n        \n        # Verify they have different configurations\n        self.assertEqual(\u0027when_supported\u0027, store1._get_checksum_config())\n        self.assertEqual(\u0027when_required\u0027, store2._get_checksum_config())\n```","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"bd7dd34f9982d24e37ce9f3aaee70056dac36814","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                        \u0027s3_store_large_object_size\u0027"},{"line_number":109,"context_line":"                    ],"},{"line_number":110,"context_line":"                    s3_store_large_object_chunk_size\u003d6,"},{"line_number":111,"context_line":"                    s3_store_enable_data_integrity_protection\u003dFalse)"},{"line_number":112,"context_line":"        # Ensure stores + locations cleared"},{"line_number":113,"context_line":"        location.SCHEME_TO_CLS_BACKEND_MAP \u003d {}"},{"line_number":114,"context_line":"        store.create_multi_stores(self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"43a6b70b_4f42b688","line":111,"in_reply_to":"4b55d65a_ab280dfa","updated":"2025-12-03 16:47:49.000000000","message":"Acknowledged","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"f863038f67e87a05eb8da7f85bd573d05f0ebd92","unresolved":true,"context_lines":[{"line_number":108,"context_line":"                        \u0027s3_store_large_object_size\u0027"},{"line_number":109,"context_line":"                    ],"},{"line_number":110,"context_line":"                    s3_store_large_object_chunk_size\u003d6,"},{"line_number":111,"context_line":"                    s3_store_enable_data_integrity_protection\u003dFalse)"},{"line_number":112,"context_line":"        # Ensure stores + locations cleared"},{"line_number":113,"context_line":"        location.SCHEME_TO_CLS_BACKEND_MAP \u003d {}"},{"line_number":114,"context_line":"        store.create_multi_stores(self.conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b55d65a_ab280dfa","line":111,"in_reply_to":"9a990b24_5b341f07","updated":"2025-09-03 14:25:44.000000000","message":"I feel like we\u0027re already testing that different stores can be configured differently :) Maybe we\u0027ll revisit the idea of testing this if we end up pushing this solution.","commit_id":"c966676a4d0e7e737b6ed94cb66c940cae2e2b19"}]}
