)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"8a59334fae52ac8e8f8b8505a8775f9d5e67770e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7384459e_413ee319","updated":"2025-10-24 07:59:28.000000000","message":"Clean cherry-pick, already included in 2025.2, looks good for 2025.1.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cff5c7966e70550d4789c60c889f88636ab77103","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"55811f1b_56757d32","updated":"2025-09-19 16:33:15.000000000","message":"recheck","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5859c01f_de77e110","updated":"2025-10-14 18:16:10.000000000","message":"thanks @volodymyr.boiko@vastdata.com for your review comments. Since this is a cherry-pick from the master branch and we need to add this code to Epoxy, fixing it directly in Epoxy would mean the changes are not reflected in the master branch. A better approach is to address these comments in the master branch first and then raise a new patch, or fix them when I will work on this part of the code. It is better not to fix these comments for this patch.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":802,"context_line":"            try:"},{"line_number":803,"context_line":"                self.delete_volume(volume)"},{"line_number":804,"context_line":"                volumes_model_update.append("},{"line_number":805,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027], \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":806,"context_line":"            except Exception:"},{"line_number":807,"context_line":"                volumes_model_update.append("},{"line_number":808,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"09f899a3_f49316c5","line":805,"updated":"2025-09-26 22:51:42.000000000","message":"why not use enum for statuses here:\nfields.GroupStatus.DELETED","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":802,"context_line":"            try:"},{"line_number":803,"context_line":"                self.delete_volume(volume)"},{"line_number":804,"context_line":"                volumes_model_update.append("},{"line_number":805,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027], \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":806,"context_line":"            except Exception:"},{"line_number":807,"context_line":"                volumes_model_update.append("},{"line_number":808,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"8033ebba_d3f00cc8","line":805,"in_reply_to":"09f899a3_f49316c5","updated":"2025-10-14 18:16:10.000000000","message":"Since this is a cherry-pick from the master branch and we need to add this code to Epoxy, fixing it directly in Epoxy would mean the changes are not reflected in the master branch. A better approach is to address these comments in the master branch first and then raise a new patch, or fix them when I work on this part of the code. It is better not to fix these comments for the patch.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cfbaadb57ad20787e3dae09c200a660b0e441239","unresolved":false,"context_lines":[{"line_number":802,"context_line":"            try:"},{"line_number":803,"context_line":"                self.delete_volume(volume)"},{"line_number":804,"context_line":"                volumes_model_update.append("},{"line_number":805,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027], \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":806,"context_line":"            except Exception:"},{"line_number":807,"context_line":"                volumes_model_update.append("},{"line_number":808,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"4d0b3c99_db82b67b","line":805,"in_reply_to":"8033ebba_d3f00cc8","updated":"2025-10-15 16:34:01.000000000","message":"Ack","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":806,"context_line":"            except Exception:"},{"line_number":807,"context_line":"                volumes_model_update.append("},{"line_number":808,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027],"},{"line_number":809,"context_line":"                     \u0027status\u0027: \u0027error_deleting\u0027})"},{"line_number":810,"context_line":"                LOG.exception(\"Volume %(vol)s in the group could not be \""},{"line_number":811,"context_line":"                              \"deleted.\", {\u0027vol\u0027: volume})"},{"line_number":812,"context_line":"        return model_update, volumes_model_update"}],"source_content_type":"text/x-python","patch_set":1,"id":"04e95611_5c89f898","line":809,"updated":"2025-09-26 22:51:42.000000000","message":"Also possible to use enum:\nERROR_DELETING","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":806,"context_line":"            except Exception:"},{"line_number":807,"context_line":"                volumes_model_update.append("},{"line_number":808,"context_line":"                    {\u0027id\u0027: volume[\u0027id\u0027],"},{"line_number":809,"context_line":"                     \u0027status\u0027: \u0027error_deleting\u0027})"},{"line_number":810,"context_line":"                LOG.exception(\"Volume %(vol)s in the group could not be \""},{"line_number":811,"context_line":"                              \"deleted.\", {\u0027vol\u0027: volume})"},{"line_number":812,"context_line":"        return model_update, volumes_model_update"}],"source_content_type":"text/x-python","patch_set":1,"id":"d41a9d15_b124c211","line":809,"in_reply_to":"04e95611_5c89f898","updated":"2025-10-14 18:16:10.000000000","message":"Same as above","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":846,"context_line":"                                                       snapshots)"},{"line_number":847,"context_line":"            else:"},{"line_number":848,"context_line":"                for snapshot in snapshots:"},{"line_number":849,"context_line":"                    self._create_snapshot(snapshot)"},{"line_number":850,"context_line":"        except Exception as ex:"},{"line_number":851,"context_line":"            err_msg \u003d (_(\"Create group snapshot failed (%s).\") % ex)"},{"line_number":852,"context_line":"            LOG.exception(err_msg, resource\u003dgroup_snapshot)"}],"source_content_type":"text/x-python","patch_set":1,"id":"451fb9a8_8888b23e","line":849,"updated":"2025-09-26 22:51:42.000000000","message":"What is error happens here? Exception for \"create group snapshot\" will be shadowed by self._create_snapshot(snapshot) \n\nIs it possible to narrow down scope of Exception?","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":846,"context_line":"                                                       snapshots)"},{"line_number":847,"context_line":"            else:"},{"line_number":848,"context_line":"                for snapshot in snapshots:"},{"line_number":849,"context_line":"                    self._create_snapshot(snapshot)"},{"line_number":850,"context_line":"        except Exception as ex:"},{"line_number":851,"context_line":"            err_msg \u003d (_(\"Create group snapshot failed (%s).\") % ex)"},{"line_number":852,"context_line":"            LOG.exception(err_msg, resource\u003dgroup_snapshot)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1be662cd_72361113","line":849,"in_reply_to":"451fb9a8_8888b23e","updated":"2025-10-14 18:16:10.000000000","message":"Yes I can add netapp_api.NaApiError for this. But same as above.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        for flexvol in flexvols:"},{"line_number":869,"context_line":"            try:"},{"line_number":870,"context_line":"                self.client.wait_for_busy_snapshot("},{"line_number":871,"context_line":"                    flexvol, group_snapshot[\u0027id\u0027])"},{"line_number":872,"context_line":"                self.client.delete_snapshot("},{"line_number":873,"context_line":"                    flexvol, group_snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"4666df99_41f00cea","line":870,"updated":"2025-09-26 22:51:42.000000000","message":"Could you add short description about what is happening in this loop.\nSeems like some deffered action in case of failure.\nAnd why try/except wraps wait_for_busy_snapshot and delete_snapshot?\n\nBoth actions can produce SnapshotIsBusy?","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        for flexvol in flexvols:"},{"line_number":869,"context_line":"            try:"},{"line_number":870,"context_line":"                self.client.wait_for_busy_snapshot("},{"line_number":871,"context_line":"                    flexvol, group_snapshot[\u0027id\u0027])"},{"line_number":872,"context_line":"                self.client.delete_snapshot("},{"line_number":873,"context_line":"                    flexvol, group_snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"c00c62ce_dc49a68b","line":870,"in_reply_to":"4666df99_41f00cea","updated":"2025-10-14 18:16:10.000000000","message":"Same as above.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        return None, None"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"    def create_group_from_src(self, group, volumes, group_snapshot\u003dNone,"},{"line_number":891,"context_line":"                              snapshots\u003dNone, source_group\u003dNone,"},{"line_number":892,"context_line":"                              source_vols\u003dNone):"},{"line_number":893,"context_line":"        \"\"\"Creates a group from a group snapshot or a group of cinder vols."}],"source_content_type":"text/x-python","patch_set":1,"id":"3eff2281_2cd980e2","line":890,"updated":"2025-09-26 22:51:42.000000000","message":"group and sources_groups have no usages.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":887,"context_line":""},{"line_number":888,"context_line":"        return None, None"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"    def create_group_from_src(self, group, volumes, group_snapshot\u003dNone,"},{"line_number":891,"context_line":"                              snapshots\u003dNone, source_group\u003dNone,"},{"line_number":892,"context_line":"                              source_vols\u003dNone):"},{"line_number":893,"context_line":"        \"\"\"Creates a group from a group snapshot or a group of cinder vols."}],"source_content_type":"text/x-python","patch_set":1,"id":"4de4f6f7_fcc65991","line":890,"in_reply_to":"3eff2281_2cd980e2","updated":"2025-10-14 18:16:10.000000000","message":"The group_snapshot parameter is present to match the expected method signature for group snapshot operations in the Cinder driver interface.\n\n    def delete_group_snapshot(self, context, group_snapshot, snapshots):\n        \"\"\"Deletes a group_snapshot.\n\n        :param context: the context of the caller.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"559247fa442eabea239a8eee14a2a1f101a85fea","unresolved":true,"context_lines":[{"line_number":899,"context_line":"        volume_model_updates \u003d []"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        if group_snapshot:"},{"line_number":902,"context_line":"            vols \u003d zip(volumes, snapshots)"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            for volume, snapshot in vols:"},{"line_number":905,"context_line":"                source \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed277084_b7944dd0","line":902,"updated":"2025-09-26 22:51:42.000000000","message":"snapshots\u003dNone is default value for this arguments.\nSo is it expected to have such defualt value at some circumstances? If so this line will produce TypeError. \n\nIf None is not expected - better to delete default value","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c1d1e5cdec5d88f4e4b3ab309ec90139badc7e8","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        volume_model_updates \u003d []"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        if group_snapshot:"},{"line_number":902,"context_line":"            vols \u003d zip(volumes, snapshots)"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            for volume, snapshot in vols:"},{"line_number":905,"context_line":"                source \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"f9497a59_e4510cd3","line":902,"in_reply_to":"ed277084_b7944dd0","updated":"2025-10-14 18:16:10.000000000","message":"I am using the same signature what we used in driver class. snapshots is used when source_group value is not None. If I delete the default value it will give syntax error.","commit_id":"9f197dad7b4243b5e11b2cb3e8a8a8095c4eb595"}]}
