)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Assisted-By: Github Copilot"},{"line_number":34,"context_line":"Implements: blueprint retype-volume-including-snapshots"},{"line_number":35,"context_line":"Depends-On: https://review.opendev.org/c/openstack/cinder/+/994914"},{"line_number":36,"context_line":"Change-Id: I59a43062ca1d6bed080d90fc422375b332ec68c2"},{"line_number":37,"context_line":"Signed-off-by: Fuli Qi \u003cqi.fuli@fujitsu.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"142541c1_70f8d0cb","line":35,"updated":"2026-11-10 19:10:56.000000000","message":"Nit: 994914 only touches `lvm.py` and its tests. What this change needs (`constants.SNAPSHOT_MIGRATION_SUPPORT` and the `update_migrated_snapshot` base hook) is all in the chain up to 994913, so Depends-On 994913 keeps this change\u0027s check and gate independent of the LVM one. 1013383 needs no Depends-On of its own as a git child of this change.","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ba0f62ac_398d402e","updated":"2026-11-10 19:10:56.000000000","message":"Nothing blocking; four nits and one note.","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"}],"cinder/volume/drivers/pure.py":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":true,"context_lines":[{"line_number":1709,"context_line":"        self._stats[\u0027pools\u0027] \u003d [pool]"},{"line_number":1710,"context_line":"        # The volume manager\u0027s up-front check of a snapshot-aware retype"},{"line_number":1711,"context_line":"        # reads the backend level capabilities, not the pools."},{"line_number":1712,"context_line":"        self._stats[constants.SNAPSHOT_MIGRATION_SUPPORT] \u003d True"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"    def _get_replication_capability(self):"},{"line_number":1715,"context_line":"        \"\"\"Discovered connected arrays status for replication\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff71318c_2e1f913a","line":1712,"updated":"2026-11-10 19:10:56.000000000","message":"Note, not a defect: 1009515 (pod pools) rewrites lines 1708-1709, so one of the two will need a trivial rebase. The pool-level flag at L1638 is inherited by each pod pool via `dict(root_pool)`, so no code change is needed on either side.","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":true,"context_lines":[{"line_number":2933,"context_line":"                                       raise_not_exist\u003dTrue,"},{"line_number":2934,"context_line":"                                       snapshot\u003dTrue)"},{"line_number":2935,"context_line":"        except Exception:"},{"line_number":2936,"context_line":"            # A previous, interrupted finalize attempt may already have"},{"line_number":2937,"context_line":"            # renamed the staging snapshot; the check below accepts that"},{"line_number":2938,"context_line":"            # only if the target actually exists."},{"line_number":2939,"context_line":"            renamed \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"c2104f66_410a3519","line":2936,"range":{"start_line":2936,"start_character":0,"end_line":2936,"end_character":12},"updated":"2026-11-10 19:10:56.000000000","message":"Nit: at series PS7 finalize is never re-run (`_warn_interrupted_finalize` never auto-resumes the completing window, `migrate_volume_completion` refuses to repeat adoption), so \"a previous, interrupted finalize attempt\" does not happen today. The check below is still the right design — it is what catches `_rename_volume_object` returning success on a non-400 — so I would just reword this to say the check exists because the helper only raises for a 400, and keep the already-adopted acceptance as a defensive case rather than the motivating one.","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":true,"context_lines":[{"line_number":2945,"context_line":"        # destroyed snapshot is pending eradication and holds no usable"},{"line_number":2946,"context_line":"        # data either. Failing here rolls the finalization back to the"},{"line_number":2947,"context_line":"        # intact source artifacts."},{"line_number":2948,"context_line":"        current_array \u003d self._get_current_array()"},{"line_number":2949,"context_line":"        res \u003d current_array.get_volume_snapshots(names\u003d[target_name])"},{"line_number":2950,"context_line":"        if (res.status_code !\u003d 200 or"},{"line_number":2951,"context_line":"                list(res.items)[0].destroyed is True):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0c13d422_cfeb2ab7","line":2948,"updated":"2026-11-10 19:10:56.000000000","message":"Nit: `create_snapshot` and `delete_snapshot` route with `_get_current_array(volume\u003dsnapshot.volume)`; for consistency this could pass `volume\u003dnew_snapshot.volume`. No behavioural difference for a freshly created destination volume.","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"}],"releasenotes/notes/pure-snapshot-aware-retype-f38d1b10ca2bd1ba.yaml":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9e02e0395f96881c7a0da9de66c209b32dabb7c4","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [Pure Storage] The FlashArray driver (iSCSI, FC and NVMe) now supports"},{"line_number":5,"context_line":"    retyping a volume together with its snapshots (``include_snapshots``,"},{"line_number":6,"context_line":"    Block Storage API microversion 3.72) to and from other backends that"},{"line_number":7,"context_line":"    support it. The driver reports the ``snapshot_migration_support``"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"c49cbdb2_64934a10","line":4,"updated":"2026-11-10 19:10:56.000000000","message":"Nit: recent notes use the Everpure name; please use \"[Everpure]\" rather than \"[Pure Storage]\". The rest of the note reads correctly against the series (3.72, metadata keys).","commit_id":"0f7c22c16d72af4d0609d42ab93651fef7dc3089"}]}
