)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d0df5253ec25851bc0f546ee822168969b159b64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"efa1b397_93bc9a04","updated":"2025-12-08 15:25:35.000000000","message":"Can you link to the docs about this feature?","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"45ce603fa18d1d261530c31613e7709791f25d18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0b9c9e49_5f49a159","updated":"2025-12-05 13:26:22.000000000","message":"Hi Max,\n\nThis is a valuable enhancement. I would recommend that you consider providing a brief specification or rationale [1] outlining the need for this change, as it can help others better understand the context. Typically, we prefer that features or enhancements be proposed through formal proposals rather than directly.\nThank you for your understanding.\n\n[1] https://github.com/openstack/glance-specs/blob/master/specs/spec-lite-template.rst","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"dab402902772a928440c18256f80ceb45c4cc1c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3638570e_a8124990","in_reply_to":"0b9c9e49_5f49a159","updated":"2025-12-08 15:22:09.000000000","message":"Hi Abhishek,\n\nthx for the feedback.\nI have created a spec-lite for that topic which covers the glance-store and python-glanceclient implementation:\nhttps://review.opendev.org/c/openstack/glance-specs/+/970136\n\nI have added it to the 2026.1 spec list, which I believe is the correct process.","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"}],"glance_store/_drivers/s3.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d0df5253ec25851bc0f546ee822168969b159b64","unresolved":true,"context_lines":[{"line_number":562,"context_line":"                end_byte \u003d offset + chunk_size - 1"},{"line_number":563,"context_line":"                return f\u0027bytes\u003d{offset}-{end_byte}\u0027"},{"line_number":564,"context_line":"            else:"},{"line_number":565,"context_line":"                return f\u0027bytes\u003d{offset}-\u0027"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        key \u003d s3_client.get_object("},{"line_number":568,"context_line":"            Bucket\u003dbucket, Key\u003dkey, Range\u003d_get_range_header(offset, chunk_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f2d75097_fb4fa98a","line":565,"range":{"start_line":565,"start_character":30,"end_line":565,"end_character":31},"updated":"2025-12-08 15:25:35.000000000","message":"So, I think here we would either keep this helper function but move it out of the get() method, or we\u0027d just keep the if/else without a surrounding function.","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"3ab94000fe7be98eebb3ad2068773e8775e79fcc","unresolved":true,"context_lines":[{"line_number":562,"context_line":"                end_byte \u003d offset + chunk_size - 1"},{"line_number":563,"context_line":"                return f\u0027bytes\u003d{offset}-{end_byte}\u0027"},{"line_number":564,"context_line":"            else:"},{"line_number":565,"context_line":"                return f\u0027bytes\u003d{offset}-\u0027"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        key \u003d s3_client.get_object("},{"line_number":568,"context_line":"            Bucket\u003dbucket, Key\u003dkey, Range\u003d_get_range_header(offset, chunk_size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a87d00c6_a30a17e1","line":565,"range":{"start_line":565,"start_character":30,"end_line":565,"end_character":31},"in_reply_to":"f2d75097_fb4fa98a","updated":"2025-12-08 16:17:51.000000000","message":"Hi Cyril, I moved it to a dedicated method.","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"729ce5d8daa7bc004014919d8711147eeb4fc43f","unresolved":true,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @staticmethod"},{"line_number":542,"context_line":"    def _get_range_header(offset, chunk_size):"},{"line_number":543,"context_line":"        \"\"\"Create Range header for partial content requests."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :param offset: Starting byte position"},{"line_number":546,"context_line":"        :param chunk_size: Number of bytes to read (None for read to end)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8e118fd_8c2b708a","line":543,"range":{"start_line":543,"start_character":35,"end_line":543,"end_character":42},"updated":"2025-12-08 16:29:45.000000000","message":"Could we have a link to the documentation for this feature here? (and maybe also in the commit message)","commit_id":"3c2247a5fc909c3b2bb1f44fbffb8f0c2de491b7"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"d95506afd7987dcc9edb46b0842493d19b45bcb0","unresolved":true,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @staticmethod"},{"line_number":542,"context_line":"    def _get_range_header(offset, chunk_size):"},{"line_number":543,"context_line":"        \"\"\"Create Range header for partial content requests."},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        :param offset: Starting byte position"},{"line_number":546,"context_line":"        :param chunk_size: Number of bytes to read (None for read to end)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9664d189_5eb5dc60","line":543,"range":{"start_line":543,"start_character":35,"end_line":543,"end_character":42},"in_reply_to":"e8e118fd_8c2b708a","updated":"2025-12-09 10:07:04.000000000","message":"I added a link (https://www.rfc-editor.org/rfc/rfc9110.html#name-range-requests) to the method description and also to the commit msg","commit_id":"3c2247a5fc909c3b2bb1f44fbffb8f0c2de491b7"}],"releasenotes/notes/feat-s3-add-range-capability-abe7a1e25a564be9.yaml":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d0df5253ec25851bc0f546ee822168969b159b64","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    This releases introduces the range request capability for the s3 store driver."},{"line_number":5,"context_line":"    This will allow users to download specific byte ranges of an image. It also can"},{"line_number":6,"context_line":"    improve overall download speeds significantly if a client uses multiple streams "},{"line_number":7,"context_line":"    in parralel for fetching an image. This can improve situations if the s3 backend"},{"line_number":8,"context_line":"    has limited singlestream performance."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7a09f3e2_b333b501","line":6,"range":{"start_line":6,"start_character":76,"end_line":6,"end_character":83},"updated":"2025-12-08 15:25:35.000000000","message":"Please remove the trailing whitespace","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"},{"author":{"_account_id":35676,"name":"Max","email":"max.lamprecht@digits.schwarz","username":"lamprechtm"},"change_message_id":"3ab94000fe7be98eebb3ad2068773e8775e79fcc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    This releases introduces the range request capability for the s3 store driver."},{"line_number":5,"context_line":"    This will allow users to download specific byte ranges of an image. It also can"},{"line_number":6,"context_line":"    improve overall download speeds significantly if a client uses multiple streams "},{"line_number":7,"context_line":"    in parralel for fetching an image. This can improve situations if the s3 backend"},{"line_number":8,"context_line":"    has limited singlestream performance."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"4a56c7b0_3b3342e1","line":6,"range":{"start_line":6,"start_character":76,"end_line":6,"end_character":83},"in_reply_to":"7a09f3e2_b333b501","updated":"2025-12-08 16:17:51.000000000","message":"fixed","commit_id":"be9bb9f97fc3cba8cf6f1928fdfb45a79d41937a"}]}
