)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"2abd564e8db01b9cf458181c7cf4252e8b63e960","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a69827c6_6caafe52","updated":"2026-04-24 08:47:31.000000000","message":"okay I have a idea for us streaming file. need a little time to rework a bit","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"512bd4a5d6a6c6b99c1a7707a7f807f0c980aa00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f5b00446_dfe1bf4c","updated":"2026-04-24 11:55:11.000000000","message":"streaming seems not really supported after qemu-img 6.2","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"}],"cinder/image/image_utils.py":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":true,"context_lines":[{"line_number":1119,"context_line":"        if is_xenserver_format(image_meta):"},{"line_number":1120,"context_line":"            replace_xenserver_image_with_coalesced_vhd(tmp)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if not qemu_img:"},{"line_number":1123,"context_line":"            # qemu-img is not installed but we do have a RAW image.  As a"},{"line_number":1124,"context_line":"            # result we only need to copy the image to the destination and then"},{"line_number":1125,"context_line":"            # return."}],"source_content_type":"text/x-python","patch_set":4,"id":"0074082e_0034c8e7","line":1122,"updated":"2026-07-10 06:29:25.000000000","message":"When direct_dest is set, this branch still copies to the local dest and returns. No RBD destination is written, so the subsequent RBD resize and setup operate on a missing image. Please raise a clear exception when direct_dest is requested but qemu-img is unavailable.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"5ba45903d8b214594bb91e3010a0109c0c494733","unresolved":true,"context_lines":[{"line_number":1119,"context_line":"        if is_xenserver_format(image_meta):"},{"line_number":1120,"context_line":"            replace_xenserver_image_with_coalesced_vhd(tmp)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if not qemu_img:"},{"line_number":1123,"context_line":"            # qemu-img is not installed but we do have a RAW image.  As a"},{"line_number":1124,"context_line":"            # result we only need to copy the image to the destination and then"},{"line_number":1125,"context_line":"            # return."}],"source_content_type":"text/x-python","patch_set":4,"id":"77f8cea4_69e78c28","line":1122,"updated":"2026-07-10 06:20:43.000000000","message":"When direct_dest is set, this no-qemu-img fallback still copies to the local dest. The deployed probe created a 1 MiB local file and no RBD image, after which the driver operates on a missing destination. Please raise a clear exception when direct_dest is requested but qemu-img is unavailable.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"211aa10f46c9b0efaea70565c8062a6656e2c754","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        if is_xenserver_format(image_meta):"},{"line_number":1120,"context_line":"            replace_xenserver_image_with_coalesced_vhd(tmp)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if not qemu_img:"},{"line_number":1123,"context_line":"            # qemu-img is not installed but we do have a RAW image.  As a"},{"line_number":1124,"context_line":"            # result we only need to copy the image to the destination and then"},{"line_number":1125,"context_line":"            # return."}],"source_content_type":"text/x-python","patch_set":4,"id":"2bbbf3bc_1c80cba0","line":1122,"in_reply_to":"0074082e_0034c8e7","updated":"2026-07-10 06:30:41.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3333cb81524f4fc04c5077952d507f401433768a","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        if is_xenserver_format(image_meta):"},{"line_number":1120,"context_line":"            replace_xenserver_image_with_coalesced_vhd(tmp)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if not qemu_img:"},{"line_number":1123,"context_line":"            # qemu-img is not installed but we do have a RAW image.  As a"},{"line_number":1124,"context_line":"            # result we only need to copy the image to the destination and then"},{"line_number":1125,"context_line":"            # return."}],"source_content_type":"text/x-python","patch_set":4,"id":"ac4458c2_5c11426a","line":1122,"in_reply_to":"77f8cea4_69e78c28","updated":"2026-07-10 06:24:03.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        if is_xenserver_format(image_meta):"},{"line_number":1120,"context_line":"            replace_xenserver_image_with_coalesced_vhd(tmp)"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if not qemu_img:"},{"line_number":1123,"context_line":"            # qemu-img is not installed but we do have a RAW image.  As a"},{"line_number":1124,"context_line":"            # result we only need to copy the image to the destination and then"},{"line_number":1125,"context_line":"            # return."}],"source_content_type":"text/x-python","patch_set":4,"id":"5340b9a6_2ba86857","line":1122,"in_reply_to":"77f8cea4_69e78c28","updated":"2026-07-10 06:29:25.000000000","message":"Superseded by the implementation-focused review comment on this line.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"5ba45903d8b214594bb91e3010a0109c0c494733","unresolved":true,"context_lines":[{"line_number":1167,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":1168,"context_line":"        LOG.debug(\"%s was %s, converting to %s\", image_id, fmt, volume_format)"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        convert_image(tmp, direct_dest or dest, volume_format,"},{"line_number":1171,"context_line":"                      out_subformat\u003dvolume_subformat,"},{"line_number":1172,"context_line":"                      src_format\u003ddisk_format,"},{"line_number":1173,"context_line":"                      run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":4,"id":"4619718b_ff34b06c","line":1170,"updated":"2026-07-10 06:20:43.000000000","message":"Passing an rbd: URI here also sends it through the default BlkioCgroup.subcommand() path in convert_image. The deployed code then tried to resolve the URI as a block-device path and raised FileNotFoundError. This needs direct-destination-aware throttling (qemu-img -r is one option for remote RBD output) or an explicit safe bypass; the RBD URI cannot be passed to the existing device-number lookup.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":true,"context_lines":[{"line_number":1167,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":1168,"context_line":"        LOG.debug(\"%s was %s, converting to %s\", image_id, fmt, volume_format)"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        convert_image(tmp, direct_dest or dest, volume_format,"},{"line_number":1171,"context_line":"                      out_subformat\u003dvolume_subformat,"},{"line_number":1172,"context_line":"                      src_format\u003ddisk_format,"},{"line_number":1173,"context_line":"                      run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b80e5a89_624e9431","line":1170,"updated":"2026-07-10 06:29:25.000000000","message":"direct_dest is passed to convert_image as dest. The default BlkioCgroup.subcommand resolves dest through the block-device path lookup, but an rbd: URI is not a filesystem path and raises FileNotFoundError when volume_copy_bps_limit is enabled. Please use direct-destination-aware throttling, such as qemu-img -r, or an explicit safe bypass for RBD output.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3333cb81524f4fc04c5077952d507f401433768a","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":1168,"context_line":"        LOG.debug(\"%s was %s, converting to %s\", image_id, fmt, volume_format)"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        convert_image(tmp, direct_dest or dest, volume_format,"},{"line_number":1171,"context_line":"                      out_subformat\u003dvolume_subformat,"},{"line_number":1172,"context_line":"                      src_format\u003ddisk_format,"},{"line_number":1173,"context_line":"                      run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":4,"id":"51610c20_001d06df","line":1170,"in_reply_to":"4619718b_ff34b06c","updated":"2026-07-10 06:24:03.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":1168,"context_line":"        LOG.debug(\"%s was %s, converting to %s\", image_id, fmt, volume_format)"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        convert_image(tmp, direct_dest or dest, volume_format,"},{"line_number":1171,"context_line":"                      out_subformat\u003dvolume_subformat,"},{"line_number":1172,"context_line":"                      src_format\u003ddisk_format,"},{"line_number":1173,"context_line":"                      run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a978a05_7abe7d25","line":1170,"in_reply_to":"4619718b_ff34b06c","updated":"2026-07-10 06:29:25.000000000","message":"Superseded by the implementation-focused review comment on this line.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"211aa10f46c9b0efaea70565c8062a6656e2c754","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"        disk_format \u003d fixup_disk_format(image_meta[\u0027disk_format\u0027])"},{"line_number":1168,"context_line":"        LOG.debug(\"%s was %s, converting to %s\", image_id, fmt, volume_format)"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        convert_image(tmp, direct_dest or dest, volume_format,"},{"line_number":1171,"context_line":"                      out_subformat\u003dvolume_subformat,"},{"line_number":1172,"context_line":"                      src_format\u003ddisk_format,"},{"line_number":1173,"context_line":"                      run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b5615dba_164d48cc","line":1170,"in_reply_to":"b80e5a89_624e9431","updated":"2026-07-10 06:30:41.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":true,"context_lines":[{"line_number":2046,"context_line":"        def _delete_volume(volume: Volume) -\u003e None:"},{"line_number":2047,"context_line":"            self.delete_volume(volume)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":"        _delete_volume(volume)"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp:"},{"line_number":2052,"context_line":"            image_utils.fetch_to_raw(context, image_service, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b0644c9_558f3158","line":2049,"updated":"2026-07-10 06:29:25.000000000","message":"The destination RBD image is initially created by the driver with the configured rbd_store_chunk_size and RBD features. Deleting it here and allowing qemu-img to recreate it uses Ceph defaults, so the resulting object size and features can diverge from the backend configuration. Please retain the pre-created unencrypted target and use qemu-img convert -n, optionally with --target-is-zero; keep encrypted replacement behavior separate.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"5ba45903d8b214594bb91e3010a0109c0c494733","unresolved":true,"context_lines":[{"line_number":2046,"context_line":"        def _delete_volume(volume: Volume) -\u003e None:"},{"line_number":2047,"context_line":"            self.delete_volume(volume)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":"        _delete_volume(volume)"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp:"},{"line_number":2052,"context_line":"            image_utils.fetch_to_raw(context, image_service, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"de6984cf_69c61f0f","line":2049,"updated":"2026-07-10 06:20:43.000000000","message":"The initial RBD image was created with rbd_store_chunk_size and the driver-selected RBD features, but this deletes it and lets qemu-img recreate it with Ceph defaults. On the live AIO with rbd_store_chunk_size\u003d8, the legacy path produced 8 MiB objects while this direct path produced 4 MiB objects. Can we keep the pre-created unencrypted RBD target and use qemu-img convert -n (optionally --target-is-zero)? QEMU documents -n specifically for pre-created RBD targets with site-specific options. The encrypted replacement path can remain separate.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"211aa10f46c9b0efaea70565c8062a6656e2c754","unresolved":false,"context_lines":[{"line_number":2046,"context_line":"        def _delete_volume(volume: Volume) -\u003e None:"},{"line_number":2047,"context_line":"            self.delete_volume(volume)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":"        _delete_volume(volume)"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp:"},{"line_number":2052,"context_line":"            image_utils.fetch_to_raw(context, image_service, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"78c3c68b_ee8244a6","line":2049,"in_reply_to":"6b0644c9_558f3158","updated":"2026-07-10 06:30:41.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3333cb81524f4fc04c5077952d507f401433768a","unresolved":false,"context_lines":[{"line_number":2046,"context_line":"        def _delete_volume(volume: Volume) -\u003e None:"},{"line_number":2047,"context_line":"            self.delete_volume(volume)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":"        _delete_volume(volume)"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp:"},{"line_number":2052,"context_line":"            image_utils.fetch_to_raw(context, image_service, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a09e190d_e0c0d6c6","line":2049,"in_reply_to":"de6984cf_69c61f0f","updated":"2026-07-10 06:24:03.000000000","message":"Done","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3f7284eb0cb71e4cf03057c9e07e80d544d67995","unresolved":false,"context_lines":[{"line_number":2046,"context_line":"        def _delete_volume(volume: Volume) -\u003e None:"},{"line_number":2047,"context_line":"            self.delete_volume(volume)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":"        _delete_volume(volume)"},{"line_number":2050,"context_line":""},{"line_number":2051,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp:"},{"line_number":2052,"context_line":"            image_utils.fetch_to_raw(context, image_service, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fd9b6c8a_43603511","line":2049,"in_reply_to":"de6984cf_69c61f0f","updated":"2026-07-10 06:29:25.000000000","message":"Superseded by the implementation-focused review comment on this line.","commit_id":"d8164a2fc2d9436f09244e969f88af7832fd3829"}]}
