)]}'
{"/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"}],"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":"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":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":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":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":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":"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"}]}
