)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"853e1fab_b8238e6b","updated":"2026-05-20 16:01:15.000000000","message":"A few things to clear up.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"31766cd6_69b088ec","updated":"2026-06-05 13:28:45.000000000","message":"API surface and skeleton are right. Blockers: line 175 (restore failure-state tracking), line 123 + line 126 (lineage flattening + capacity), and the DB-update atomicity comment for implementability.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2f35dbe2_ee324c0b","updated":"2026-06-08 14:50:12.000000000","message":"Provided some comments.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e8db03869e3e3c03bc1d06dcb7886013e5debf06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d18b4fa1_f73ae8b2","updated":"2026-06-11 12:13:06.000000000","message":"Some additional comments.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"54ac45b8_5d4df8b1","updated":"2026-06-05 14:50:37.000000000","message":"few concerns inline","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"}],"specs/2026.2/retype-volume-including-snapshots.rst":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Datacenter Maintenance or Backend Upgrade: An operator needs to vacate all"},{"line_number":24,"context_line":"  volumes from a storage backend that is being decommissioned or upgraded. Some"},{"line_number":25,"context_line":"  volumes on that backend have snapshots (e.g., user-created restore points)."},{"line_number":26,"context_line":"  Today, those volumes cannot be moved or retyped without deleting the"},{"line_number":27,"context_line":"  snapshots, which is not acceptable to the users. With this feature, the"},{"line_number":28,"context_line":"  operator could migrate such volumes (and their snapshots) seamlessly to a new"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f6b7542a_0150410d","line":25,"range":{"start_line":24,"start_character":75,"end_line":25,"end_character":76},"updated":"2026-06-08 14:50:12.000000000","message":"A general trend we have seen in case of CSPs is, users do not want to keep snapshots on local storage for longer retention periods. This risks their golden copies to get deleted/lost in case of a disaster. Users use backup solutions to move the golden copies of their Volumes and VMs and remove the local snapshots. So a lot of users would be using backup solutions to migrate volumes with snapshots.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"4736281341cf71bee828c73a3c3b19257eddaf89","unresolved":true,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Datacenter Maintenance or Backend Upgrade: An operator needs to vacate all"},{"line_number":24,"context_line":"  volumes from a storage backend that is being decommissioned or upgraded. Some"},{"line_number":25,"context_line":"  volumes on that backend have snapshots (e.g., user-created restore points)."},{"line_number":26,"context_line":"  Today, those volumes cannot be moved or retyped without deleting the"},{"line_number":27,"context_line":"  snapshots, which is not acceptable to the users. With this feature, the"},{"line_number":28,"context_line":"  operator could migrate such volumes (and their snapshots) seamlessly to a new"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1cc5411b_ef72bf07","line":25,"range":{"start_line":24,"start_character":75,"end_line":25,"end_character":76},"in_reply_to":"f6b7542a_0150410d","updated":"2026-06-09 12:36:16.000000000","message":"Thank you for your comments. I agree with that. However, there are still many systems that require taking volume snapshots and saving them for a certain period. For example, a system might need to take daily snapshots and keep them for 30 days. For such systems, a local snapshot is simpler and more feasible than a remote backup solution. We need to consider the needs of these systems.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":true,"context_lines":[{"line_number":89,"context_line":"   requested, Cinder determines whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"},{"line_number":92,"context_line":"   migration. This includes creating a volume from a snapshot, migrating or"},{"line_number":93,"context_line":"   copying the temporary volume to the destination backend, and creating a"},{"line_number":94,"context_line":"   snapshot on the destination backend."},{"line_number":95,"context_line":"3. Cinder migrates snapshots first (Cinder copies each snapshot in dependency"},{"line_number":96,"context_line":"   order as a volume to destination backend, and then creates a new snapshot on"},{"line_number":97,"context_line":"   the destination backend)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"376cd1da_4aaec7e7","line":94,"range":{"start_line":92,"start_character":63,"end_line":94,"end_character":39},"updated":"2026-06-05 14:50:37.000000000","message":"what happens to the temporary volume? is that deleted after the snapshot is created on destination backend? Some vendors have dependency between the volume and snapshot and sometimes deleting the source volume requires flattening the snapshot since the snapshot is a COW or ROW clone of the source so all volume blocks needs to be copied before it\u0027s deleted.\nIf that scenario happens, won\u0027t the snapshot end up having more storage space on the destination than on the source (where they were a COW or ROW clone) ?","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":89,"context_line":"   requested, Cinder determines whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"},{"line_number":92,"context_line":"   migration. This includes creating a volume from a snapshot, migrating or"},{"line_number":93,"context_line":"   copying the temporary volume to the destination backend, and creating a"},{"line_number":94,"context_line":"   snapshot on the destination backend."},{"line_number":95,"context_line":"3. Cinder migrates snapshots first (Cinder copies each snapshot in dependency"},{"line_number":96,"context_line":"   order as a volume to destination backend, and then creates a new snapshot on"},{"line_number":97,"context_line":"   the destination backend)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"48146adb_11593324","line":94,"range":{"start_line":92,"start_character":63,"end_line":94,"end_character":39},"in_reply_to":"376cd1da_4aaec7e7","updated":"2026-06-08 14:50:12.000000000","message":"Agreed. NetApp uses COW or clones to create snapshots. These are not full copy of the blocks but point in time pointers to the original block. Volume creation from clone itself is a clone as well. So this will require the source side to first split and then copy the entire volume on secondary site. Once done snapshots needs to be taken and the Volume from snapshot cannot exist since that will be an additional space overhead on destination site.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"4736281341cf71bee828c73a3c3b19257eddaf89","unresolved":true,"context_lines":[{"line_number":89,"context_line":"   requested, Cinder determines whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"},{"line_number":92,"context_line":"   migration. This includes creating a volume from a snapshot, migrating or"},{"line_number":93,"context_line":"   copying the temporary volume to the destination backend, and creating a"},{"line_number":94,"context_line":"   snapshot on the destination backend."},{"line_number":95,"context_line":"3. Cinder migrates snapshots first (Cinder copies each snapshot in dependency"},{"line_number":96,"context_line":"   order as a volume to destination backend, and then creates a new snapshot on"},{"line_number":97,"context_line":"   the destination backend)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"2eadb5a0_1ea3754a","line":94,"range":{"start_line":92,"start_character":63,"end_line":94,"end_character":39},"in_reply_to":"48146adb_11593324","updated":"2026-06-09 12:36:16.000000000","message":"My idea is to create only one corresponding volume on the target backend. Then, data will be transferred from each source snapshot to this volume, and new snapshots will be created from it for each one. Finally, the current volume\u0027s data will be copied to this new volume, which will then become the canonical volume.\nSince there is only one temporary volume and the snapshot data will be transferred in order, COW or ROW clone will be supported on the destination if the backend supports it.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":true,"context_lines":[{"line_number":110,"context_line":"   original source volume and snapshots unchanged."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"This design ensures that the retyped volume on the destination has an"},{"line_number":113,"context_line":"identical set of snapshots (with the same names and IDs) as it had on the"},{"line_number":114,"context_line":"source."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Workflow details"}],"source_content_type":"text/x-rst","patch_set":3,"id":"0629fc9b_10bdc72f","line":113,"range":{"start_line":113,"start_character":27,"end_line":113,"end_character":56},"updated":"2026-06-05 14:50:37.000000000","message":"how do we ensure this? IIUC, if the source and destination are part of the same openstack cluster, and we migrate temporary volumes and create snapshots out of it, it will have a new UUID for the snapshot right? Will we update all the destination UUIDs of snapshots to the source ones? how can we do that unless we delete all the source snapshots?\nI guess once we migrate the base volume, we can delete the volume along with it\u0027s snapshots and then change the snapshot UUIDs to be the same as source but that\u0027s my understanding, please document how we are going to achieve it.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":133,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":134,"context_line":"    dirver)."},{"line_number":135,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"}],"source_content_type":"text/x-rst","patch_set":3,"id":"20578b19_4d03ec5d","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":10},"updated":"2026-06-08 14:50:12.000000000","message":"nit: driver - typo","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"4736281341cf71bee828c73a3c3b19257eddaf89","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":133,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":134,"context_line":"    dirver)."},{"line_number":135,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"}],"source_content_type":"text/x-rst","patch_set":3,"id":"aea6f074_05fec52b","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":10},"in_reply_to":"20578b19_4d03ec5d","updated":"2026-06-09 12:36:16.000000000","message":"Thank you, I will correct it.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9b3f77b27f25f3c721884f0cec66e3f6b042dd08","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":133,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":134,"context_line":"    dirver)."},{"line_number":135,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"}],"source_content_type":"text/x-rst","patch_set":3,"id":"0510877a_3b904102","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":10},"in_reply_to":"aea6f074_05fec52b","updated":"2026-06-25 14:48:42.000000000","message":"Done","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":135,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"},{"line_number":138,"context_line":"  * Create a snapshot from the destination volume representing the transferred"},{"line_number":139,"context_line":"    snapshot content, preserving snapshot metadata."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Maintain and/or reconstruct snapshot lineage:"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"09130369_e73307f6","line":139,"range":{"start_line":138,"start_character":4,"end_line":139,"end_character":51},"updated":"2026-06-05 13:28:45.000000000","message":"Each destination snapshot is a fresh snapshot taken of a copy, not a faithful reproduction of the source snapshot\u0027s exact image. For an available volume the source is static, so fidelity is fine. But per lines 100-102 the in-use path copies via the live Nova-assisted flow, so the destination snapshots are only crash-consistent at copy time — they are not identical point-in-time images of the originals. Please state whether that semantic difference is accepted for in-use retype, or how it\u0027s avoided (e.g. quiesce, or restricting which VM states qualify).","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"},{"line_number":138,"context_line":"  * Create a snapshot from the destination volume representing the transferred"},{"line_number":139,"context_line":"    snapshot content, preserving snapshot metadata."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Maintain and/or reconstruct snapshot lineage:"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7cb5b8be_fa10b036","line":139,"range":{"start_line":139,"start_character":22,"end_line":139,"end_character":51},"updated":"2026-06-08 14:50:12.000000000","message":"Snapshot metadata will change once the transfer is complete. The ID/path and container of snapshots will changes. For vendors who use luns using COW snapshoting, this would mean change in the lun paths/file paths for eg.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":135,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":136,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":137,"context_line":"    generic host-assisted copy path is used"},{"line_number":138,"context_line":"  * Create a snapshot from the destination volume representing the transferred"},{"line_number":139,"context_line":"    snapshot content, preserving snapshot metadata."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* Maintain and/or reconstruct snapshot lineage:"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1d966875_5e2f6927","line":139,"range":{"start_line":138,"start_character":4,"end_line":139,"end_character":51},"in_reply_to":"09130369_e73307f6","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"* When the volume status is ``in-use``:"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"  * Attach the destination volume to the same instance/host where the source"},{"line_number":157,"context_line":"    volume is attached (without changing the guest-visible device until the"},{"line_number":158,"context_line":"    final swap/commit step)."},{"line_number":159,"context_line":"  * Invoke the existing in-use migration data copy flow where Cinder calls Nova"},{"line_number":160,"context_line":"    to copy the data between the source and destination volumes."},{"line_number":161,"context_line":"  * Complete the migration by updating Cinder state to treat the destination"}],"source_content_type":"text/x-rst","patch_set":3,"id":"c450242d_55cc6a78","line":158,"range":{"start_line":156,"start_character":0,"end_line":158,"end_character":28},"updated":"2026-06-05 14:50:37.000000000","message":"doesn\u0027t this already happen in the migration workflow where we ask nova to copy the data between source and destination and swap the volumes in the end?","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":164,"context_line":"Cinder DB update"},{"line_number":165,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":166,"context_line":"* Update the ``host`` / backend fields for the volume."},{"line_number":167,"context_line":"* Update snapshot provider metadata such as ``provider_location``,"},{"line_number":168,"context_line":"  ``provider_id``, and ``provider_auth`` so that existing Cinder snapshot"},{"line_number":169,"context_line":"  records refer to the destination backend snapshot artifacts."},{"line_number":170,"context_line":"* Update the snapshots\u0027 ``volume_type_id`` when the volume type changes."},{"line_number":171,"context_line":"* Ensure snapshot records continue to reference the migrated volume."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae5f489_e1f65b23","line":168,"range":{"start_line":167,"start_character":2,"end_line":168,"end_character":40},"updated":"2026-06-05 13:28:45.000000000","message":"The destination snapshots are created via the normal create_snapshot driver call, which yields a model-update for a new snapshot record — but this design keeps the original Cinder snapshot ID and grafts new backend provider fields onto it. Please spell out:\n\n * the exact mapping (original snapshot record ← new backend artifact\u0027s provider fields), and\n * atomicity: the volume plus all N snapshot records must be repointed as a unit; a crash between per-snapshot updates leaves a mix of source/destination pointers. \"update … in a driver-consistent manner\" is too vague for the field that determines whether the snapshot is openable after retype.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":179,"context_line":"----------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":182,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":183,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":184,"context_line":"  leaving the source volume untouched."},{"line_number":185,"context_line":"* If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback"},{"line_number":186,"context_line":"  process."}],"source_content_type":"text/x-rst","patch_set":3,"id":"e4ee4260_262ed163","line":183,"range":{"start_line":182,"start_character":59,"end_line":183,"end_character":43},"updated":"2026-06-08 14:50:12.000000000","message":"How does cinder orchestrate the rollback in between of the migration failure? Unless the design considers updating each snapshot detail per migration with a success or failure flag.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e8db03869e3e3c03bc1d06dcb7886013e5debf06","unresolved":true,"context_lines":[{"line_number":179,"context_line":"----------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":182,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":183,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":184,"context_line":"  leaving the source volume untouched."},{"line_number":185,"context_line":"* If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback"},{"line_number":186,"context_line":"  process."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fb5f67ff_8af65722","line":183,"range":{"start_line":182,"start_character":59,"end_line":183,"end_character":43},"in_reply_to":"2daac4d3_35ef76a6","updated":"2026-06-11 12:13:06.000000000","message":"My question was also directed to understanding who will be responsible to orchestrate the cleanup? Cinder core will not know which migrations have failed so I believe the driver will be responsible to take that onus as it will have the list of all snapshots being migrated? If this has to be orchestrated frm Cinder core, how does the driver know which snapshots to clean as well?","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9b3f77b27f25f3c721884f0cec66e3f6b042dd08","unresolved":false,"context_lines":[{"line_number":179,"context_line":"----------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":182,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":183,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":184,"context_line":"  leaving the source volume untouched."},{"line_number":185,"context_line":"* If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback"},{"line_number":186,"context_line":"  process."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7b8e1f19_b8716112","line":183,"range":{"start_line":182,"start_character":59,"end_line":183,"end_character":43},"in_reply_to":"a8c10b08_8fc56918","updated":"2026-06-25 14:48:42.000000000","message":"Acknowledged","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"4736281341cf71bee828c73a3c3b19257eddaf89","unresolved":true,"context_lines":[{"line_number":179,"context_line":"----------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":182,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":183,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":184,"context_line":"  leaving the source volume untouched."},{"line_number":185,"context_line":"* If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback"},{"line_number":186,"context_line":"  process."}],"source_content_type":"text/x-rst","patch_set":3,"id":"2daac4d3_35ef76a6","line":183,"range":{"start_line":182,"start_character":59,"end_line":183,"end_character":43},"in_reply_to":"e4ee4260_262ed163","updated":"2026-06-09 12:36:16.000000000","message":"In the current specification design, a volume migration cannot be interrupted once initiated. If a migration is interrupted for any reason, the volume migration status will change from \"migrating\" to \"error,\" and all migrated snapshot artifacts on the destination will be cleaned up. A system administrator will then be required to resolve the resulting error by resetting the volume\u0027s status.\nIf cleaning up migrated snapshot artifacts fails, the failure will be logged, and the system administrator will need to delete them manually.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":179,"context_line":"----------------"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":182,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":183,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":184,"context_line":"  leaving the source volume untouched."},{"line_number":185,"context_line":"* If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback"},{"line_number":186,"context_line":"  process."}],"source_content_type":"text/x-rst","patch_set":3,"id":"a8c10b08_8fc56918","line":183,"range":{"start_line":182,"start_character":59,"end_line":183,"end_character":43},"in_reply_to":"fb5f67ff_8af65722","updated":"2026-06-15 01:21:19.000000000","message":"Cinder will be responsible for orchestrating the cleanup. When a migration fails, all snapshots that were migrated to the destination will be cleaned up. There\u0027s no need to identify individual failed snapshots.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abd5e1bfbd40d351dd440105e115e6495d1c1767","unresolved":true,"context_lines":[{"line_number":272,"context_line":"Retyping volume duration increases with:"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"* number of snapshots,"},{"line_number":275,"context_line":"* snapshot sizes / copy mechanisms,"},{"line_number":276,"context_line":"* and volume size."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"a094b07d_af099cce","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":34},"updated":"2026-06-08 14:50:12.000000000","message":"the concurrent operations will need to be designed in such a way that the parallel cloning limits of each driver can be taken care of. Depending on storage vendors, there will be limitations on how many parallel COW operations can be done, and if Cinder allows all operations to happen at the same time, it may reduce the probability of success in scaled out setups.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"3c7a5092a5815268ecda936b360e6a8aec26c05c","unresolved":false,"context_lines":[{"line_number":272,"context_line":"Retyping volume duration increases with:"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"* number of snapshots,"},{"line_number":275,"context_line":"* snapshot sizes / copy mechanisms,"},{"line_number":276,"context_line":"* and volume size."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"db7ed34a_5d346d4a","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":34},"in_reply_to":"3d702bbc_c9188c21","updated":"2026-06-15 05:17:40.000000000","message":"Acknowledged","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"4736281341cf71bee828c73a3c3b19257eddaf89","unresolved":true,"context_lines":[{"line_number":272,"context_line":"Retyping volume duration increases with:"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"* number of snapshots,"},{"line_number":275,"context_line":"* snapshot sizes / copy mechanisms,"},{"line_number":276,"context_line":"* and volume size."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"e373717c_a53f1612","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":34},"in_reply_to":"a094b07d_af099cce","updated":"2026-06-09 12:36:16.000000000","message":"Given that only one corresponding volume can be created on the destination to maintain volume-snapshot relationships and support COW or ROW cloning, snapshots should be migrated in a specific sequence. Therefore, I do not believe that parallel cloning is a feasible reality.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":272,"context_line":"Retyping volume duration increases with:"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"* number of snapshots,"},{"line_number":275,"context_line":"* snapshot sizes / copy mechanisms,"},{"line_number":276,"context_line":"* and volume size."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3d702bbc_c9188c21","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":34},"in_reply_to":"e1b14910_ce124437","updated":"2026-06-15 01:21:19.000000000","message":"Before migration, a pre-check will verify if the destination\u0027s quota and other migration conditions are met. Only migrations that satisfy these conditions will be permitted.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e8db03869e3e3c03bc1d06dcb7886013e5debf06","unresolved":true,"context_lines":[{"line_number":272,"context_line":"Retyping volume duration increases with:"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"* number of snapshots,"},{"line_number":275,"context_line":"* snapshot sizes / copy mechanisms,"},{"line_number":276,"context_line":"* and volume size."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"e1b14910_ce124437","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":34},"in_reply_to":"e373717c_a53f1612","updated":"2026-06-11 12:13:06.000000000","message":"Okay. A follow up question would be - how does this work with volume and snapshot quotas in place. If the destination backend has quotas assigned and is allowed to migrate volumes without limiting based on quotas, it may overprovision the destination and can be misused?","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":true,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"overall time becomes:"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"* (vendor volume migration time) + (snapshot migration time), where snapshot"},{"line_number":281,"context_line":"  migration cost is roughly proportional to volume size multiplied by the"},{"line_number":282,"context_line":"  number of snapshot generations."},{"line_number":283,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"bd8315e8_8c36c595","line":280,"range":{"start_line":280,"start_character":35,"end_line":280,"end_character":60},"updated":"2026-06-05 14:50:37.000000000","message":"we really need to consider this in performance as well as storage impact, if a volume of 2TB has 10 snapshots, it means we might end up migrating 22TB of data, which, when libvirt does it, is a really slow process and might take up days to complete. not to mention the storage space occupied during the length of the operation.\nthough the available snapshots will create available volumes which might use a dd operation and might be able to preserve sparseness, please try running some numbers so we have a clear idea what the performance impact of such an operation would be in a real world deployment.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0eacc5ac1d0235a7d1d03370e583e2c37b494e30","unresolved":true,"context_lines":[{"line_number":349,"context_line":"* Update Cinder admin documentation to describe behavior and caveats."},{"line_number":350,"context_line":"* Document driver and hypervisor constraints (e.g., libvirt requirement for"},{"line_number":351,"context_line":"  generic attached-volume migration)."},{"line_number":352,"context_line":"* Document that snapshot-heavy volumes will take longer to retype."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"References"},{"line_number":355,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d628cff5_435b2ae0","line":352,"range":{"start_line":352,"start_character":0,"end_line":352,"end_character":66},"updated":"2026-06-05 14:50:37.000000000","message":"please try to include some real world scenario calculation of a large volume with multiple snapshots migration so end users have some idea of what the performance/storage space cost would be to opt into such an operation.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":349,"context_line":"* Update Cinder admin documentation to describe behavior and caveats."},{"line_number":350,"context_line":"* Document driver and hypervisor constraints (e.g., libvirt requirement for"},{"line_number":351,"context_line":"  generic attached-volume migration)."},{"line_number":352,"context_line":"* Document that snapshot-heavy volumes will take longer to retype."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"References"},{"line_number":355,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"52d8ac61_997c1780","line":352,"range":{"start_line":352,"start_character":0,"end_line":352,"end_character":66},"in_reply_to":"d628cff5_435b2ae0","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"6a25305a858607d447ff1747757ad84fce51eec2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"776c5333bebab69e327649093c5af963394489ef","unresolved":true,"context_lines":[{"line_number":132,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":133,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":134,"context_line":"    generic host-assisted copy path is used."},{"line_number":135,"context_line":"  * Create a snapshot from the destination volume representing the transferred"},{"line_number":136,"context_line":"    snapshot content."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Maintain and/or reconstruct snapshot lineage:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"8e3bb1aa_7307aa7c","line":135,"updated":"2026-06-24 15:23:52.000000000","message":"I think this part needs more details -- this sounds like it relies on a backend being able to synthesize a snapshot on volume A out of temporary volume B. Is that a function that backends actually support?","commit_id":"66c49be9b45587a93f816a5a40e8930257d27055"},{"author":{"_account_id":34260,"name":"Masayoshi Mizuma","display_name":"Masayoshi Mizuma","email":"m.mizuma@fujitsu.com","username":"mmizuma"},"change_message_id":"dd628c9ef99bbfe7ca0f1af4858a36d8468a0857","unresolved":true,"context_lines":[{"line_number":132,"context_line":"  * Transfer data from the source temporary volume to the destination volume."},{"line_number":133,"context_line":"    A driver may optimize this copy through existing copy hooks; otherwise the"},{"line_number":134,"context_line":"    generic host-assisted copy path is used."},{"line_number":135,"context_line":"  * Create a snapshot from the destination volume representing the transferred"},{"line_number":136,"context_line":"    snapshot content."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Maintain and/or reconstruct snapshot lineage:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e4968f69_b6d46765","line":135,"in_reply_to":"8e3bb1aa_7307aa7c","updated":"2026-06-30 06:22:04.000000000","message":"Thank you for your comments. The spec is updated to clarify that the generic flow does not assume any backend-specific ability to synthesize a snapshot on destination volume A directly from temporary volume B. \nThe baseline path is to materialize the source snapshot via the existing create_volume_from_snapshot capability, copy that point-in-time data into the already-created staging destination volume, and then invoke the destination backend\u0027s normal create_snapshot operation on that staging volume. \nAny backend-specific copy optimization or snapshot adopt/rename step is optional driver-side logic, not a required generic primitive.","commit_id":"66c49be9b45587a93f816a5a40e8930257d27055"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cc185d76e361d6f144105d126d4b2e867e072f5a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Retype volume including snapshots"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"URL of launchpad blueprint:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a13f95bb_eb3d7029","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":13},"updated":"2026-06-30 14:15:17.000000000","message":"We should probably have a more specific title - this is really about retype w/ migration and not just plain retype.","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":34260,"name":"Masayoshi Mizuma","display_name":"Masayoshi Mizuma","email":"m.mizuma@fujitsu.com","username":"mmizuma"},"change_message_id":"5e6cc288c5aefdf6965e20641914e464942477f2","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Retype volume including snapshots"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"URL of launchpad blueprint:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b7fe4d9d_7746d0f7","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":13},"in_reply_to":"424c17e2_326b4216","updated":"2026-07-01 02:56:48.000000000","message":"spec is updated","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":34260,"name":"Masayoshi Mizuma","display_name":"Masayoshi Mizuma","email":"m.mizuma@fujitsu.com","username":"mmizuma"},"change_message_id":"486aea99deea7e8b91a87512900b956e24030d4e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Retype volume including snapshots"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"URL of launchpad blueprint:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"424c17e2_326b4216","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":13},"in_reply_to":"a13f95bb_eb3d7029","updated":"2026-07-01 00:38:21.000000000","message":"Thank you for pointing this out. I agree that the current title is not specific enough, since the proposed change is focused on retype operations that require migration, rather than plain retype.\nI will update the title to \"Retype volume with migration including snapshots\" to make this clearer.","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cc185d76e361d6f144105d126d4b2e867e072f5a","unresolved":true,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Users benefit from retained snapshots after migration."},{"line_number":291,"context_line":"* No changes required to user commands for snapshot management."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Performance Impact"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f441591_0a5c1a7d","line":292,"updated":"2026-06-30 14:15:17.000000000","message":"Worth noting that this is only for retype+migration and the non-retype Cinder migrate API will not support this.","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":34260,"name":"Masayoshi Mizuma","display_name":"Masayoshi Mizuma","email":"m.mizuma@fujitsu.com","username":"mmizuma"},"change_message_id":"5e6cc288c5aefdf6965e20641914e464942477f2","unresolved":true,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Users benefit from retained snapshots after migration."},{"line_number":291,"context_line":"* No changes required to user commands for snapshot management."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Performance Impact"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"c8f0c987_588b5935","line":292,"in_reply_to":"2c7ce09f_ddd59a85","updated":"2026-07-01 02:56:48.000000000","message":"spec is updated","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":34260,"name":"Masayoshi Mizuma","display_name":"Masayoshi Mizuma","email":"m.mizuma@fujitsu.com","username":"mmizuma"},"change_message_id":"486aea99deea7e8b91a87512900b956e24030d4e","unresolved":true,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"* Users benefit from retained snapshots after migration."},{"line_number":291,"context_line":"* No changes required to user commands for snapshot management."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"Performance Impact"},{"line_number":294,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"2c7ce09f_ddd59a85","line":292,"in_reply_to":"7f441591_0a5c1a7d","updated":"2026-07-01 00:38:21.000000000","message":"Thank you for your comments. I agree that the current wording could be read as applying to the generic Cinder migrate API.\n\nI will revise this section to make it clear that this behavior is only for retype operations that require migration. The non-retype Cinder migrate API remains out of scope and will not support migrating volumes with snapshots as part of this spec.","commit_id":"6bd9dec9e82f7f3a92a78dba41e1cb74e58ab662"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"097b5e346f9b4ca30e7621c90ab96d3b0b0d2011","unresolved":true,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Add a new microversion to ``POST /v3/{project_id}/volumes/{volume_id}/action``"},{"line_number":230,"context_line":"Retype a Volume API to add a value ``on-demand-include-snapshots`` to the field"},{"line_number":231,"context_line":"``migration_policy``, and it is for an admin."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Requests that use this value with an older microversion fail with a"},{"line_number":234,"context_line":"``400 Bad Request`` error."}],"source_content_type":"text/x-rst","patch_set":6,"id":"4d563428_9f6763de","line":231,"updated":"2026-07-09 13:43:50.000000000","message":"I\u0027m not sure that adding this as a new migration_policy value is the correct place to add this -- overloading this field creates some confusion. Retyping a volume with snapshots without migration should still succeed with migration-policy\u003dnever.\n\nWe should discuss and get input from a few reviewers about this API design.","commit_id":"23291dce6a95a84d65ce0a72711488eee1d3bed4"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9aafe287061d386d55317992ca51567190871068","unresolved":true,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Add a new microversion to ``POST /v3/{project_id}/volumes/{volume_id}/action``"},{"line_number":230,"context_line":"Retype a Volume API to add a value ``on-demand-include-snapshots`` to the field"},{"line_number":231,"context_line":"``migration_policy``, and it is for an admin."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Requests that use this value with an older microversion fail with a"},{"line_number":234,"context_line":"``400 Bad Request`` error."}],"source_content_type":"text/x-rst","patch_set":6,"id":"eba77dd5_eca49c8e","line":231,"in_reply_to":"4d563428_9f6763de","updated":"2026-07-14 22:29:02.000000000","message":"This feature is only enabled when the migration_policy\u003d\"on-demand-include-snapshots\" option is specified.\nThe results of \"retyping a volume\", considering the existence of snapshots and the occurrence of migration under both migration_policy\u003d\"never\" and migration_policy\u003d\"on-demand-include-snapshots\" options, are detailed below:\n\n| migration_policy            | snapshot | migraton | result  |\n|:----------------------------|:---------|:---------|:--------|\n| never                       | w/       | w/       | fail    |\n| never                       | w/       | w/o      | succeed |\n| never                       | w/o      | w/       | fail    |\n| never                       | w/o      | w/o      | succeed |\n| on-demand-include-snapshots | w/       | w/       | succeed |\n| on-demand-include-snapshots | w/       | w/o      | succeed |\n| on-demand-include-snapshots | w/o      | w/       | succeed |\n| on-demand-include-snapshots | w/o      | w/o      | succeed |\n\nCould you please tell me more about your concerns?","commit_id":"23291dce6a95a84d65ce0a72711488eee1d3bed4"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"097b5e346f9b4ca30e7621c90ab96d3b0b0d2011","unresolved":true,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"  * retype a volume that includes N snapshots across two backends with different"},{"line_number":376,"context_line":"    volume types."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Documentation Impact"},{"line_number":379,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"f67bbdd0_252190cb","line":377,"updated":"2026-07-09 13:43:50.000000000","message":"Need to test more complex scenarios such as retype with snapshots from an unencrypted type on backend A to an encrypted type on backend B.","commit_id":"23291dce6a95a84d65ce0a72711488eee1d3bed4"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9aafe287061d386d55317992ca51567190871068","unresolved":true,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"  * retype a volume that includes N snapshots across two backends with different"},{"line_number":376,"context_line":"    volume types."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Documentation Impact"},{"line_number":379,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"0da7cb7e_5d2fd036","line":377,"in_reply_to":"8cbe77dc_694a4c8b","updated":"2026-07-14 22:29:02.000000000","message":"Thinking more about this point, encrypted volumes (regardless of source or destination) will be excluded from this feature in the Hibiscus release. Support for encrypted volumes will be implemented in the future.","commit_id":"23291dce6a95a84d65ce0a72711488eee1d3bed4"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"7cbad3830e52e4d8fa3563bdaa7d4db6bf725b0a","unresolved":true,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"  * retype a volume that includes N snapshots across two backends with different"},{"line_number":376,"context_line":"    volume types."},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"Documentation Impact"},{"line_number":379,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"8cbe77dc_694a4c8b","line":377,"in_reply_to":"f67bbdd0_252190cb","updated":"2026-07-13 22:39:16.000000000","message":"Thank you for your commnets. I will update it in the next version.","commit_id":"23291dce6a95a84d65ce0a72711488eee1d3bed4"}],"specs/2026.2/volume-migration-with-snapshot.rst":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4b3f33806e3fa3d3dd883f1e4fa07625e7f74188","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  only supported by the storage driver, the cloud vendor will face storage"},{"line_number":41,"context_line":"  vendor lock-in. Implementing this feature in software would allow them to"},{"line_number":42,"context_line":"  introduce the best available storage whenever expansion is required, thereby"},{"line_number":43,"context_line":"  preventing vendor lock-in."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7169b8c8_31340b7d","line":43,"updated":"2026-05-20 20:31:03.000000000","message":"Migration from one backend to another is done via a call to retype, so that should be mentioned here.  Backends typically can\u0027t talk directly to each other so cinder has to assist with this.  \n\nwhen a user wants to migrate a volume, this is typically moving to the same type of backend, re: 1 netapp to another.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"e28e63b7e6c66e6b2af356861cd5ce0520050eae","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  only supported by the storage driver, the cloud vendor will face storage"},{"line_number":41,"context_line":"  vendor lock-in. Implementing this feature in software would allow them to"},{"line_number":42,"context_line":"  introduce the best available storage whenever expansion is required, thereby"},{"line_number":43,"context_line":"  preventing vendor lock-in."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"f2bf6159_34f2ffe2","line":43,"in_reply_to":"7169b8c8_31340b7d","updated":"2026-05-27 03:29:19.000000000","message":"Thank you for the suggestion, I will include this in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":40,"context_line":"  only supported by the storage driver, the cloud vendor will face storage"},{"line_number":41,"context_line":"  vendor lock-in. Implementing this feature in software would allow them to"},{"line_number":42,"context_line":"  introduce the best available storage whenever expansion is required, thereby"},{"line_number":43,"context_line":"  preventing vendor lock-in."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"14c98d2f_60f60efd","line":43,"in_reply_to":"f2bf6159_34f2ffe2","updated":"2026-06-05 13:28:45.000000000","message":"Mostly covered by the host-assisted framing already. Just add the one volume-level sentence — cross-backend volume movement is mediated by Cinder for the same reason — so the motivation reads end-to-end.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"When a volume migration is requested:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"1. When a volume migration with retype API is requested, Cinder determines"},{"line_number":89,"context_line":"   whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"}],"source_content_type":"text/x-rst","patch_set":1,"id":"e6f98025_1a2c0424","line":88,"updated":"2026-05-20 16:01:15.000000000","message":"the title of this spec references migration, and there is a migrate API, so you need to clarify why you are referencing the retype API.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"When a volume migration is requested:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"1. When a volume migration with retype API is requested, Cinder determines"},{"line_number":89,"context_line":"   whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"}],"source_content_type":"text/x-rst","patch_set":1,"id":"30db32a1_2dd27603","line":88,"in_reply_to":"28c04d41_addf20bf","updated":"2026-06-05 13:28:45.000000000","message":"Your retype-first rationale is reasonable and the retitle covers most of this. Please just make it explicit in the spec that the os-migrate_volume API is out of scope for now and that retype is the chosen vehicle, so reviewers don\u0027t assume parity between the two APIs.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"When a volume migration is requested:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"1. When a volume migration with retype API is requested, Cinder determines"},{"line_number":89,"context_line":"   whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"}],"source_content_type":"text/x-rst","patch_set":1,"id":"db78a1c7_65005fdf","line":88,"in_reply_to":"30db32a1_2dd27603","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"When a volume migration is requested:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"1. When a volume migration with retype API is requested, Cinder determines"},{"line_number":89,"context_line":"   whether the source volume has snapshots."},{"line_number":90,"context_line":"2. If the volume has snapshots, Cinder verifies that the source and destination"},{"line_number":91,"context_line":"   backends support the operations required for host-assisted snapshot"}],"source_content_type":"text/x-rst","patch_set":1,"id":"28c04d41_addf20bf","line":88,"in_reply_to":"e6f98025_1a2c0424","updated":"2026-05-27 03:27:26.000000000","message":"Thank you for the comments. Ideally, this feature should be implemented in both the migrate API and the retype API. Given that the retype API can also move a volume\u0027s data to a different storage backend and is more frequently utilized by system administrators, I would like to proceed with implementing the feature via the retype API first.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~~"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* The system enumerates all snapshots for the volume, ordered oldest -\u003e newest"},{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"51aa6b03_04fade0d","line":123,"range":{"start_line":123,"start_character":2,"end_line":123,"end_character":46},"updated":"2026-05-20 16:01:15.000000000","message":"if the backend doesn\u0027t expose the relationship, is oldest -\u003e newest always true? Chains with deltas or dependent snapshots need to be considered.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~~"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* The system enumerates all snapshots for the volume, ordered oldest -\u003e newest"},{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ab2b35f7_3afb741d","line":123,"range":{"start_line":123,"start_character":2,"end_line":123,"end_character":46},"in_reply_to":"51aa6b03_04fade0d","updated":"2026-05-27 03:27:26.000000000","message":"That\u0027s a really good point. We also need to consider migration in relation to snapshot dependencies. I\u0027ll make sure to include that in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~~"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* The system enumerates all snapshots for the volume, ordered oldest -\u003e newest"},{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1cb94c5c_1ff30411","line":123,"range":{"start_line":123,"start_character":2,"end_line":123,"end_character":46},"in_reply_to":"5934f742_366a84b0","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":120,"context_line":"~~~~~~~~~~~~~~~~~~"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"* The system enumerates all snapshots for the volume, ordered oldest -\u003e newest"},{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5934f742_366a84b0","line":123,"range":{"start_line":123,"start_character":2,"end_line":123,"end_character":46},"in_reply_to":"ab2b35f7_3afb741d","updated":"2026-06-05 13:28:45.000000000","message":"The new lineage bullet helps, but it\u0027s conditional (\"when the backend supports\") and aspirational. It still doesn\u0027t address the three concrete cases: the host-assisted path flattens chains into independent full copies; backends that don\u0027t expose the parent relationship (is created_at ordering safe?); and delta/dependent snapshots where ordering is load-bearing. Please make those explicit rather than deferring to backend capability.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."}],"source_content_type":"text/x-rst","patch_set":1,"id":"364987e4_e093c88a","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":52},"updated":"2026-05-20 16:01:15.000000000","message":"How will these temporary volumes affect quota? The migration could fail is the quota limit is hit before completion. What about using a temporary tenant, like in glance image-cache, for these temporary volumes.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."}],"source_content_type":"text/x-rst","patch_set":1,"id":"49e61a2a_23b43e21","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":52},"in_reply_to":"2ab14449_f6094802","updated":"2026-06-05 13:28:45.000000000","message":"To close my own earlier question: I was conflating user quota with backend capacity. You\u0027re right that service-internal temp volumes needn\u0027t consume user quota. The concern I should have stated precisely is backend capacity / reserved_percentage headroom on source and destination during the copy — N flattened generations × full volume size of transient space. Please:\n\n * name capacity exhaustion mid-migration as a precondition check + failure mode feeding the rollback path; and\n * confirm the temp volumes are quota-exempt by mechanism (service tenant? manager-level bypass?), not just by assertion.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."}],"source_content_type":"text/x-rst","patch_set":1,"id":"2ab14449_f6094802","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":52},"in_reply_to":"364987e4_e093c88a","updated":"2026-05-27 03:27:26.000000000","message":"Could you please clarify what you mean by `quota`? In the current specification design, internal resources will not consume user-defined `quota` during the migration process. However, we do have to consider other resource limits, such as available storage capacity.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":123,"context_line":"  (or by parent relationship where available)."},{"line_number":124,"context_line":"* For each snapshot:"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."}],"source_content_type":"text/x-rst","patch_set":1,"id":"235affa2_8531a33a","line":126,"range":{"start_line":126,"start_character":36,"end_line":126,"end_character":52},"in_reply_to":"49e61a2a_23b43e21","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e1978c91b2f267f13144e48574e0ea6c65a129ed","unresolved":true,"context_lines":[{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."},{"line_number":130,"context_line":"  * Transfer data from source temporary volume to destination temporary volume."},{"line_number":131,"context_line":"  * Create a snapshot on the destination backend representing the transferred"},{"line_number":132,"context_line":"    snapshot content, preserving snapshot metadata."}],"source_content_type":"text/x-rst","patch_set":1,"id":"0d1eace6_1bab1430","line":129,"updated":"2026-06-04 20:36:32.000000000","message":"Why would the backend need a temporary volume as well?  That would require tying a snapshot to a different volume than it was created from when all is said and done.\n\nWhy not migrate the temporary to the target, snapshot it, and then move on to the next one?\n\nOr do you envision this happening in parallel / to handle the in-use case?\n\nI ask because I\u0027m not sure how many storage devices support moving a snapshot from one parent to another (i.e. temporary to target).","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"e605df5f4738f324e479a09452725202a7ffb5f5","unresolved":true,"context_lines":[{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."},{"line_number":130,"context_line":"  * Transfer data from source temporary volume to destination temporary volume."},{"line_number":131,"context_line":"  * Create a snapshot on the destination backend representing the transferred"},{"line_number":132,"context_line":"    snapshot content, preserving snapshot metadata."}],"source_content_type":"text/x-rst","patch_set":1,"id":"dc5a5d9a_f86016e0","line":129,"in_reply_to":"0d1eace6_1bab1430","updated":"2026-06-05 04:27:44.000000000","message":"Thank you for your comment.\n\nThere was something wrong in the description of the workflow details.\n\nMy idea is to create only one corresponding volume on the target backend. Then, data will be transferred from each source snapshot to this volume, and new snapshots will be created from it for each one. Finally, the current volume\u0027s data will be copied to this new volume, which will then become the canonical volume.\n\nI will update the description in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"2306b245c62dc5cdf77ff0ebee1b6ea0cd110e98","unresolved":true,"context_lines":[{"line_number":126,"context_line":"  * Materialize the snapshot into a temporary volume (or use a"},{"line_number":127,"context_line":"    backend-optimized snapshot export/copy mechanism when provided by the"},{"line_number":128,"context_line":"    dirver)."},{"line_number":129,"context_line":"  * Create a corresponding temporary destination volume on the target backend."},{"line_number":130,"context_line":"  * Transfer data from source temporary volume to destination temporary volume."},{"line_number":131,"context_line":"  * Create a snapshot on the destination backend representing the transferred"},{"line_number":132,"context_line":"    snapshot content, preserving snapshot metadata."}],"source_content_type":"text/x-rst","patch_set":1,"id":"2433469e_41c7f1dd","line":129,"in_reply_to":"dc5a5d9a_f86016e0","updated":"2026-06-05 04:46:14.000000000","message":"Gotcha, thank you. This is how I was envisioning it should go.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":170,"context_line":"----------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":173,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":174,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":175,"context_line":"  leaving the source volume untouched. If rollback is not possible, Cinder"},{"line_number":176,"context_line":"  marks the migration as failed and leaves detailed status for operator"},{"line_number":177,"context_line":"  intervention."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"b4bd17f5_fb37d87c","line":175,"range":{"start_line":173,"start_character":58,"end_line":175,"end_character":37},"updated":"2026-05-20 16:01:15.000000000","message":"what happens if the cleanup fails midway through. How is state tracked? Can the `migstat` field have additional values to reflect thus?","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"79ad9cb312c117c38a67c39e641e94e7965601ad","unresolved":true,"context_lines":[{"line_number":170,"context_line":"----------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":173,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":174,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":175,"context_line":"  leaving the source volume untouched. If rollback is not possible, Cinder"},{"line_number":176,"context_line":"  marks the migration as failed and leaves detailed status for operator"},{"line_number":177,"context_line":"  intervention."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"24192ce0_0c071a9c","line":175,"range":{"start_line":173,"start_character":58,"end_line":175,"end_character":37},"in_reply_to":"1e895b7c_51bf5f3e","updated":"2026-05-28 01:48:37.000000000","message":"Thinking more about this. When the cleanup fails, the system administrator may need to delete the uncleaned snapshots manually. I will add a `cleanup_error` value to track this state in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bd141b85751a7a8e6e16bac99a5b10f71eab358","unresolved":true,"context_lines":[{"line_number":170,"context_line":"----------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":173,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":174,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":175,"context_line":"  leaving the source volume untouched. If rollback is not possible, Cinder"},{"line_number":176,"context_line":"  marks the migration as failed and leaves detailed status for operator"},{"line_number":177,"context_line":"  intervention."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9dcba7a5_d2ecd8d8","line":175,"range":{"start_line":173,"start_character":58,"end_line":175,"end_character":37},"in_reply_to":"24192ce0_0c071a9c","updated":"2026-06-05 13:28:45.000000000","message":"Understood that dropping `migstat` in PS3 was intentional, on the reasoning that migration is uninterruptible and failures auto-clean. But that relies on cleanup always succeeding, and PS3 says the opposite two lines earlier: \"If cleaning up migrated snapshot artifacts fails, Cinder stops the rollback process.\" That stopped-mid-rollback state is exactly the partially-committed case — orphaned destination snapshots + temp volumes, source intact — and \"auto-deleted, no state needed\" doesn\u0027t cover it. Please either:\n\n(a) reinstate the cleanup_error value you proposed in your first reply, or\n(b) document concretely where an operator reads which artifacts leaked.\n\nAlso: \"Data model impact: None\" + \"leaves detailed status for operator intervention\" are in tension — if status is recorded, say where; if not, the operator has nothing to act on.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"9eb4a2e1567a59174f95232343f56b6839422bed","unresolved":true,"context_lines":[{"line_number":170,"context_line":"----------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":173,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":174,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":175,"context_line":"  leaving the source volume untouched. If rollback is not possible, Cinder"},{"line_number":176,"context_line":"  marks the migration as failed and leaves detailed status for operator"},{"line_number":177,"context_line":"  intervention."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ace1d58c_a7ce30be","line":175,"range":{"start_line":173,"start_character":58,"end_line":175,"end_character":37},"in_reply_to":"9dcba7a5_d2ecd8d8","updated":"2026-06-15 01:21:19.000000000","message":"I will update it in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":170,"context_line":"----------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"* If snapshot migration fails, the volume migration is not attempted."},{"line_number":173,"context_line":"* If volume migration fails after snapshots have migrated, Cinder attempts to"},{"line_number":174,"context_line":"  rollback by cleaning up migrated snapshot artifacts on the destination and"},{"line_number":175,"context_line":"  leaving the source volume untouched. If rollback is not possible, Cinder"},{"line_number":176,"context_line":"  marks the migration as failed and leaves detailed status for operator"},{"line_number":177,"context_line":"  intervention."},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1e895b7c_51bf5f3e","line":175,"range":{"start_line":173,"start_character":58,"end_line":175,"end_character":37},"in_reply_to":"b4bd17f5_fb37d87c","updated":"2026-05-27 03:27:26.000000000","message":"In the current specification design, a volume migration cannot be interrupted once initiated. If a migration is interrupted for any reason, a system administrator\u0027s intervention is required to resolve the resulting error state. In such cases, any snapshots created during the process are automatically deleted, precluding the need to record their state in `migstat`.\n\nConsidering that the time required for volume migration can be significantly extended with numerous snapshot generations, I believe the ability to interrupt and resume volume migration should be supported in the future. At that point, new values should be added to `migstat` to track snapshot states.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":189,"context_line":"Data model impact"},{"line_number":190,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Unknown at this time, currently under investigation."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"REST API impact"},{"line_number":195,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"604e9cc3_5fc1a8a7","line":192,"range":{"start_line":192,"start_character":0,"end_line":192,"end_character":52},"updated":"2026-05-20 16:01:15.000000000","message":"This needs to be clarified before we can approve this spec.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":189,"context_line":"Data model impact"},{"line_number":190,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Unknown at this time, currently under investigation."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"REST API impact"},{"line_number":195,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"af13a22b_a19fe53c","line":192,"range":{"start_line":192,"start_character":0,"end_line":192,"end_character":52},"in_reply_to":"604e9cc3_5fc1a8a7","updated":"2026-05-27 03:27:26.000000000","message":"Certainly, I will include this in the next version.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2516ac3ecaf517039a1867da0392c720f8ea7956","unresolved":true,"context_lines":[{"line_number":205,"context_line":"   {"},{"line_number":206,"context_line":"        \"os-retype\": {"},{"line_number":207,"context_line":"                \"new_type\": \"new-storage-backend\","},{"line_number":208,"context_line":"                \"migration_policy\": \"on-demand-with-snapshot\""},{"line_number":209,"context_line":"        }"},{"line_number":210,"context_line":"   }"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"f5e501b0_cde868ae","line":208,"range":{"start_line":208,"start_character":37,"end_line":208,"end_character":60},"updated":"2026-05-20 16:01:15.000000000","message":"This is a little confusing. It could be read as snapshots are created on-demand. Maybe rename to `on-demand-include-snapshots` or add a new flag to extend the existing `on-demand` policy","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"},{"author":{"_account_id":38251,"name":"Fuli Qi","display_name":"Fuli Qi","email":"qi.fuli@fujitsu.com","username":"fqi"},"change_message_id":"2434bbe4e111d00e32a51c98071dd40d839530a2","unresolved":true,"context_lines":[{"line_number":205,"context_line":"   {"},{"line_number":206,"context_line":"        \"os-retype\": {"},{"line_number":207,"context_line":"                \"new_type\": \"new-storage-backend\","},{"line_number":208,"context_line":"                \"migration_policy\": \"on-demand-with-snapshot\""},{"line_number":209,"context_line":"        }"},{"line_number":210,"context_line":"   }"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ebcce149_dbef1f2e","line":208,"range":{"start_line":208,"start_character":37,"end_line":208,"end_character":60},"in_reply_to":"f5e501b0_cde868ae","updated":"2026-05-27 03:27:26.000000000","message":"Thank you for the suggestion, I will rename it to `on-demand-include-snapshots`.","commit_id":"1c8a542f0d9e8a3b6b8184de497b691f834c6abe"}]}
