)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"0f504b97e548a1a0884f0e412423a21c2948b73a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"21f8916f_70dda6b6","updated":"2026-10-13 11:42:28.000000000","message":"@anthony.galica@hitachivantara.com\n\nCreated this new Gerrit review for -\n949006: [IBM SVf driver] Adding support for individual volume snapshots | https://review.opendev.org/c/openstack/cinder/+/949006\n\n\nThe previous one reached its patchset limit and shows the below error:\n\nError 409 (Conflict): Change 949006 may not exceed 1000 updates. It may still be abandoned, submitted and you can add/remove reviewers to/from the attention-set. To continue working on this change, recreate it with a new Change-Id, then abandon this one.\n\nTrace Id: 1791891578900-0adca4ce\n\n\nTherefore, abandoning the previous review.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"1f138bfa1276a72a89984553dc825895d21d7585","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fb20a75a_fadc4085","updated":"2026-10-13 16:24:33.000000000","message":"recheck","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"ec7a7055fb14635ff58f1d779b64f183a6a25042","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8dc8af15_a1d90181","in_reply_to":"21f8916f_70dda6b6","updated":"2026-10-13 11:53:57.000000000","message":"Can you \"import\" my unresolved comments (into a single comment if you prefer) and answer them here in this new patch?  I\u0027m guessing it stopped you when you tried to reply to them?\n\nI also wonder if it would be easier to find out if we can just increase that limit.  Makes it hard to review if the history goes out the window. I realize this isn\u0027t your fault.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"ef3c63576656024f8a57785e9d4c79ca28788bed","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f8d8be53_feee5f1d","in_reply_to":"3ad3951b_6d4d95c4","updated":"2026-10-21 16:24:09.000000000","message":"Gotcha, I went and validated the last patch and re-reviewed the changes here today.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"72e0b13e36a32bd3e496441a08eec0ec5d457542","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c65cd804_3ec26747","in_reply_to":"66213065_85c9c494","updated":"2026-10-14 07:22:39.000000000","message":"File: cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py\n\nagalica: Will this break other functionality by no longer appending params here?\nharsh : No. params are still added in line# 1052.\nSome conditional params are to be added before the rest of the params. Hence the bifurcation.\n\nagalica: Should this be run_ssh_check_created?\nharsh : Resolved.\n\nagalica: Should all of these volumegroup snapshot changes be in patch https://review.opendev.org/c/openstack/cinder/+/982617 ?\nharsh : This came as part of a separate development epic. Hence we had to keep it separate for internal tracking purpose.\nMoreover 982617 already has a +2 and we don\u0027t want to disturb it as it has been long pending.\n\nagalica: Will this break other functionality?\nIt seems like an unrelated bugfix, but I worry it could break something else that was working fine with the default value.\nharsh : The new implementation is actually the correct design: always prefer the operator\u0027s explicit configuration, fall back to the caller\u0027s argument only when the config option is absent. The old code had the priority inverted — it silently ignored an operator-configured svc_snapshot_pool_name. The new code fixes this.\n\nagalica: I have issues with get_volume_name in patch https://review.opendev.org/c/openstack/cinder/+/982617 , but should it stay, I wonder if this volume[\u0027name\u0027] should be using it.\nharsh : Yes, that is going to stay. Corrected this line now.\nI had to correct the line# 4953\n\nagalica: This constant was added in the prior patch: TEMP_VG_SNAPSHOT_RETENTION_MINUTES\nharsh : Resolved\n\nagalica: Potential get_volume_name again (x2)\nharsh : Resolved. Corrected the lines 5038, 5039, 5051, 5052, 5063 as well.\n\nagalica: Perhaps this True value should be a constant (in other places as well).\nharsh : This seems alright to me.\n\nagalica: What\u0027s the purpose of starting and immediately deleting?\nI don\u0027t see this code elsewhere.\nharsh: This else block is not needed here. For CG, start/stop is already present in other helper functions. Removing it from here.\n\n\n\nFile: doc/source/configuration/block-storage/drivers/ibm-storwize-svc-driver.rst\n\nagalica: Maybe it\u0027s too late for this, but shouldn\u0027t migrate_from_flashcopy default to False if it\u0027s going to break older snapshots?\nharsh : Going forward, the customers are expected to move to new CLIs, hence it is set to True. If anyone wants to use the older FlashCopy, they will have to manually set it to False.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"2fa8ef19d7b18c04d5c3da8f13f79c8bcabd0205","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"66213065_85c9c494","in_reply_to":"8dc8af15_a1d90181","updated":"2026-10-13 16:24:25.000000000","message":"Yes, it didnt allow me to reply on that patch. Sure i\u0027ll get the comments here and their replies.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"76ddaee88753eecb25e0debda8b8e816c9e0e0d8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3ad3951b_6d4d95c4","in_reply_to":"c65cd804_3ec26747","updated":"2026-10-21 12:50:23.000000000","message":"@anthony.galica@hitachivantara.com\n\nI found some more issues in the previous patch (949006) which i have fixed here.","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"532a657d40c73b8b30b124144b3ad140bf7b21e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1ba50eac_299d273e","in_reply_to":"f8d8be53_feee5f1d","updated":"2026-10-22 12:08:13.000000000","message":"Thankyou :)\n\nI have addressed the comment and added a few more UTs that i observed were missing in the previous patch (949006)","commit_id":"92a390ccdffad53a1e1ebb18c2a1e59520f7962b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"ef3c63576656024f8a57785e9d4c79ca28788bed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d98c5ea7_793e9181","updated":"2026-10-21 16:24:09.000000000","message":"Neutral review as I have one question about error handling, but otherwise I didn\u0027t see any other issues.","commit_id":"53b04c1ee4dfb9c17436e87c0fa0f695c10e8b57"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"532a657d40c73b8b30b124144b3ad140bf7b21e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0b0d6f77_fce73933","updated":"2026-10-22 12:08:13.000000000","message":"@anthony.galica@hitachivantara.com\nI have fixed the params check and tightened the UTs as well.\n\nThe patch should be now stable.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"ef3c63576656024f8a57785e9d4c79ca28788bed","unresolved":true,"context_lines":[{"line_number":715,"context_line":"            raise ValueError("},{"line_number":716,"context_line":"                \"Specify either \u0027trigger\u0027 or \u0027triggerid\u0027, not both.\")"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        if trigger and not params.get(\u0027volumegroup\u0027):"},{"line_number":719,"context_line":"            raise ValueError("},{"line_number":720,"context_line":"                \"\u0027volumegroup\u0027 is required when triggering by snapshot name.\")"},{"line_number":721,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e4319c1e_3b3df76c","line":718,"updated":"2026-10-21 16:24:09.000000000","message":"Should we also check for `params[\u0027name\u0027]`?","commit_id":"53b04c1ee4dfb9c17436e87c0fa0f695c10e8b57"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"532a657d40c73b8b30b124144b3ad140bf7b21e1","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            raise ValueError("},{"line_number":716,"context_line":"                \"Specify either \u0027trigger\u0027 or \u0027triggerid\u0027, not both.\")"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        if trigger and not params.get(\u0027volumegroup\u0027):"},{"line_number":719,"context_line":"            raise ValueError("},{"line_number":720,"context_line":"                \"\u0027volumegroup\u0027 is required when triggering by snapshot name.\")"},{"line_number":721,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"52519cae_53771375","line":718,"in_reply_to":"e4319c1e_3b3df76c","updated":"2026-10-22 12:08:13.000000000","message":"Yes, good catch. This check is required as per the storage CLI.\n\nResolved.","commit_id":"53b04c1ee4dfb9c17436e87c0fa0f695c10e8b57"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":685,"context_line":"        try:"},{"line_number":686,"context_line":"            LOG.debug(\u0027Executing SSH command: %s\u0027, \u0027 \u0027.join(ssh_cmd))"},{"line_number":687,"context_line":"            out, err \u003d self._ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":688,"context_line":"            if not err:"},{"line_number":689,"context_line":"                if not out:"},{"line_number":690,"context_line":"                    return None"},{"line_number":691,"context_line":"                return CLIResponse((out, err), ssh_cmd\u003dssh_cmd, delim\u003d\u0027!\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"08f94f1b_aede1ddb","line":688,"updated":"2026-10-25 16:38:29.000000000","message":"Any stderr is treated as \"not found\".","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":697,"context_line":"            LOG.error(msg)"},{"line_number":698,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def addsnapshot(self, params):"},{"line_number":701,"context_line":"        \"\"\"Create or trigger a snapshot."},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"        :param params: A dictionary containing snapshot operation parameters."}],"source_content_type":"text/x-python","patch_set":3,"id":"db11277e_0b58c6b5","line":700,"updated":"2026-10-25 16:38:29.000000000","message":"addsnapshot packs four modes into one function through dict flags; \u0027triggerid\u0027: True; ValueError that callers (3478-3480) don\u0027t catch.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":772,"context_line":"        try:"},{"line_number":773,"context_line":"            LOG.debug(\u0027Executing SSH command: %s\u0027, \u0027 \u0027.join(ssh_cmd))"},{"line_number":774,"context_line":"            self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":775,"context_line":"        except Exception as ex:"},{"line_number":776,"context_line":"            msg \u003d (_(\u0027Failed to run rmsnapshot. \u0027"},{"line_number":777,"context_line":"                     \u0027Exception: %(ex)s\u0027) % {\u0027ex\u0027: ex})"},{"line_number":778,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2aa18d4a_895548ff","line":775,"updated":"2026-10-25 16:38:29.000000000","message":"Wrapping every error hides the CMMVC code needed for idempotency or SnapshotIsBusy.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":1995,"context_line":"                value \u003d words[0]"},{"line_number":1996,"context_line":""},{"line_number":1997,"context_line":"            # Handle clone_type capability"},{"line_number":1998,"context_line":"            if ((not scope or scope \u003d\u003d \u0027capabilities\u0027) and"},{"line_number":1999,"context_line":"               key \u003d\u003d \u0027clone_type\u0027):"},{"line_number":2000,"context_line":"                scope \u003d None"},{"line_number":2001,"context_line":"                key \u003d \u0027clone_type\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"234de1f3_2cce9f5e","line":1998,"updated":"2026-10-25 16:38:29.000000000","message":"drivers:clone_type isn\u0027t validated. Group and volume-type syntax differ.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4512,"context_line":"        LOG.debug(\u0027leave: check_for_setup_error\u0027)"},{"line_number":4513,"context_line":""},{"line_number":4514,"context_line":"    def _run_ssh(self, cmd_list, check_exit_code\u003dTrue, attempts\u003d1):"},{"line_number":4515,"context_line":"        cmd_list \u003d [str(arg) for arg in cmd_list]"},{"line_number":4516,"context_line":"        cinder_utils.check_ssh_injection(cmd_list)"},{"line_number":4517,"context_line":"        command \u003d \u0027 \u0027.join(cmd_list)"},{"line_number":4518,"context_line":"        if not self.sshpool:"}],"source_content_type":"text/x-python","patch_set":3,"id":"cac0a0b8_4cfff0c0","line":4515,"updated":"2026-10-25 16:38:29.000000000","message":"Question: which caller needed the global str() cast? It hides the fail-fast in check_ssh_injection.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4916,"context_line":"        # pool_name will always have a value (either configured or default)"},{"line_number":4917,"context_line":"        LOG.debug(\u0027Creating snapshot in pool: %s\u0027, pool_name)"},{"line_number":4918,"context_line":""},{"line_number":4919,"context_line":"        if migrate_from_flashcopy:"},{"line_number":4920,"context_line":"            try:"},{"line_number":4921,"context_line":"                params \u003d {"},{"line_number":4922,"context_line":"                    \u0027name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"943d9435_892c231d","line":4919,"updated":"2026-10-25 16:38:29.000000000","message":"No code-level check, although volume-group paths gate at 8.5.1 and 8.6.2. Work out FlashCopy 2.0 support in do_setup and fall back to legacy.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4929,"context_line":"                    LOG.error(msg)"},{"line_number":4930,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":4931,"context_line":""},{"line_number":4932,"context_line":"                snapshot.metadata[\u0027svc_volume_snapshot_id\u0027] \u003d snapshot_svc_id"},{"line_number":4933,"context_line":"                snapshot.save()"},{"line_number":4934,"context_line":"                LOG.info(\u0027Created snapshot %s with ID %s\u0027,"},{"line_number":4935,"context_line":"                         snapshot[\u0027name\u0027], snapshot_svc_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"38035dbd_e390c67d","line":4932,"updated":"2026-10-25 16:38:29.000000000","message":"Project members can edit snapshot metadata, so a forged svc_volume_snapshot_id leads to rmsnapshot on an ID that isn\u0027t theirs. Return {\u0027provider_id\u0027: id} and check name and source volume before acting.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4933,"context_line":"                snapshot.save()"},{"line_number":4934,"context_line":"                LOG.info(\u0027Created snapshot %s with ID %s\u0027,"},{"line_number":4935,"context_line":"                         snapshot[\u0027name\u0027], snapshot_svc_id)"},{"line_number":4936,"context_line":"            except Exception as e:"},{"line_number":4937,"context_line":"                msg \u003d (_(\u0027Failed to create snapshot %(snap)s: %(err)s\u0027) %"},{"line_number":4938,"context_line":"                       {\u0027snap\u0027: snapshot[\u0027name\u0027], \u0027err\u0027: str(e)})"},{"line_number":4939,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fab0e97b_79ac2c3c","line":4936,"updated":"2026-10-25 16:38:29.000000000","message":"Error message wrapped twice; backend snapshot orphaned if save() fails; 4927-4930 unreachable.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4948,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":4949,"context_line":"        code_level \u003d self._state[\u0027code_level\u0027]"},{"line_number":4950,"context_line":"        force_unmap \u003d code_level \u003e\u003d storwize_const.SVC_CODE_LEVEL_7700"},{"line_number":4951,"context_line":"        migrate_from_flashcopy \u003d self._get_config_param_value("},{"line_number":4952,"context_line":"            \u0027migrate_from_flashcopy\u0027, True)"},{"line_number":4953,"context_line":""},{"line_number":4954,"context_line":"        if migrate_from_flashcopy:"}],"source_content_type":"text/x-python","patch_set":3,"id":"c821c075_8bfb8036","line":4951,"updated":"2026-10-25 16:38:29.000000000","message":"The new path is chosen by a flag that defaults to True, not by the snapshot. Existing legacy snapshots can\u0027t be deleted, reverted or cloned (delete ends in error_deleting). Setting the flag to False, or rolling back, makes delete_vdisk report success while leaving new snapshots on the array. Choose per snapshot; add upgrade tests.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":4965,"context_line":""},{"line_number":4966,"context_line":"            params \u003d {\u0027id\u0027: snapshot_id}"},{"line_number":4967,"context_line":"            # check if snapshot exists"},{"line_number":4968,"context_line":"            if not self.is_volume_snapshot_exists(params):"},{"line_number":4969,"context_line":"                msg \u003d _(\u0027delete_snapshot: volume snapshot %s \u0027"},{"line_number":4970,"context_line":"                        \u0027does not exist\u0027) % str(snapshot.id)"},{"line_number":4971,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"69ee115d_45d323ec","line":4968,"updated":"2026-10-25 16:38:29.000000000","message":"Delete isn\u0027t idempotent. A transient CLI error also shows up as \"does not exist\".","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":5005,"context_line":"                \u0027-fromsourcevolume\u0027, src_volume_name,"},{"line_number":5006,"context_line":"                \u0027-fromsnapshotid\u0027, snapshot_id"},{"line_number":5007,"context_line":"            ]"},{"line_number":5008,"context_line":"            self._helpers.create_hyperswap_volume(volume_name, size,"},{"line_number":5009,"context_line":"                                                  \u0027gb\u0027, pool, opts,"},{"line_number":5010,"context_line":"                                                  clone_params)"},{"line_number":5011,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ea221691_c265edf9","line":5008,"updated":"2026-10-25 16:38:29.000000000","message":"create_hyperswap_volume drops iogrp, easytier and -copies 2, so clones of mirrored types lose their second copy.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"b121a6f0a09dcc3b969576207b98e097b43e4230","unresolved":true,"context_lines":[{"line_number":7781,"context_line":"        :param snapshots: a list of Snapshot objects in the group_snapshot."},{"line_number":7782,"context_line":"        :returns: model_update, snapshots_model_update"},{"line_number":7783,"context_line":"        \"\"\""},{"line_number":7784,"context_line":"        source_vol \u003d self.db.volume_get(context, snapshots[0].get(\u0027volume_id\u0027))"},{"line_number":7785,"context_line":"        pool \u003d volume_utils.extract_host(source_vol[\u0027host\u0027], \u0027pool\u0027)"},{"line_number":7786,"context_line":"        pool_name \u003d self._get_config_param_value("},{"line_number":7787,"context_line":"            \u0027svc_snapshot_pool_name\u0027, pool)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ce323c87_90d87a13","line":7784,"updated":"2026-10-25 16:38:29.000000000","message":"Group snapshot block runs for every group type: snapshots[0] fails on empty groups (breaking the generic fallback), all snapshots are forced into the first volume\u0027s pool, CG and generic groups get an extra DB query, and 7789-7790 do nothing.","commit_id":"2f1d207f8e1253342ac5c737d737f15b38cdd856"}]}
