)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"f87511ddb06767b830461b92e18c1e935bf71486","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a92eb6ef_b8086d14","updated":"2026-07-08 05:44:34.000000000","message":"recheck","commit_id":"fdba56f78131ea7c0b6eb33f2b83bd023ac4ecf4"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"2812e24602714ba01fddf4119f82aa13fb0a9937","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5ba19a29_3cfb7dd1","updated":"2026-07-08 02:51:15.000000000","message":"run-netapp ci","commit_id":"fdba56f78131ea7c0b6eb33f2b83bd023ac4ecf4"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5bff9121209eebda7be9cb95735da71827b18499","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"62ea9ec8_8118ad55","updated":"2026-07-23 09:15:12.000000000","message":"Please address the comments.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7a3b3b1f_7f58c7d0","updated":"2026-07-23 19:52:32.000000000","message":"Thanks Medha for working on this feature, I have added few comments, please take a look.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"43618ded_0ce34672","updated":"2026-07-29 13:49:10.000000000","message":"Please check comments.","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"7a0dfbe41689b229f8a2c0d352212933efa8b16e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"055d1935_83f3adca","updated":"2026-07-30 10:11:56.000000000","message":"LGTM","commit_id":"9d78bfb511b0d3c204d5dfa918d1a84b1e25b27d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"99624f7125b3a4710ae0242e1f963a5bf9659f55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"e0338127_4bdc0e95","updated":"2026-07-30 10:18:12.000000000","message":"LGTM, Make sure NetApp CI is passing for this patch.","commit_id":"9d78bfb511b0d3c204d5dfa918d1a84b1e25b27d"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5bcc2732ffa8c0c4e0789f44555d050d0bb514f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"d146f4d6_eb5ef5c1","updated":"2026-07-30 10:02:33.000000000","message":"LGTM.","commit_id":"9d78bfb511b0d3c204d5dfa918d1a84b1e25b27d"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"61cd7baaa7efd549a74afb896578e3d606c04b30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"194d6150_55ac586c","updated":"2026-08-06 03:34:42.000000000","message":"run-NetApp CI","commit_id":"9d78bfb511b0d3c204d5dfa918d1a84b1e25b27d"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"9390f935bcfeaa704d7d333a3050ba9f9adf5d84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c253e183_74d8cf00","updated":"2026-08-06 04:50:14.000000000","message":"run-NetApp CI","commit_id":"9d78bfb511b0d3c204d5dfa918d1a84b1e25b27d"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"d3d8e95485b1227eda3e762d22fd7214e4b47083","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"8301f9d3_41cfdaa3","updated":"2026-08-11 03:50:50.000000000","message":"LGTM.","commit_id":"a82889e052c8f1aac2085076237de37ef2cef792"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"54754221074cceff67c1a6e51a2c6194a2bb8cfc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"abbddd67_918c309a","updated":"2026-08-11 05:47:38.000000000","message":"recheck","commit_id":"a82889e052c8f1aac2085076237de37ef2cef792"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"290ca03f899a9d70e4ce4f8a3507c1a78f222471","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"f3bc9bb9_f91b9d70","updated":"2026-08-10 06:08:57.000000000","message":"recheck","commit_id":"a82889e052c8f1aac2085076237de37ef2cef792"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"64e908f251be9817a38687c71631c5ceebaa80a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"87f14e3e_70e93deb","updated":"2026-08-13 08:26:28.000000000","message":"run-netapp ci","commit_id":"a82889e052c8f1aac2085076237de37ef2cef792"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8b72ab5b1abd6b1d80686b5ed65b14c10b5d4963","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"5462ef09_054c7c1b","updated":"2026-08-14 10:31:02.000000000","message":"run-netapp ci","commit_id":"d8d5604bcb00ac707745d283c6d6bb3a62e920c3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"7607bed5429a9bb6d69635f6e0f496cd1c36e05b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"c82199d8_05485f75","updated":"2026-08-20 15:37:09.000000000","message":"Can you please triage the NetApp CI failure? Otherwise codewise looks good to me.","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"acceb7b47684a16766e8ae75c3e842c9443e6073","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"366cd882_ffdad344","updated":"2026-08-21 15:06:55.000000000","message":"LGTM","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"ca4052c902e663252be9b9ce215c35cbe2216c75","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"2d996ede_a2b64b51","updated":"2026-08-21 05:05:30.000000000","message":"run-netapp ci","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"46977c209892a07710009ed55ec10e045435b1cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"6513befa_6c6cfb3e","updated":"2026-08-21 07:08:26.000000000","message":"run-netapp ci","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"0c8816075e1dcca92e079967002cdd6e96e40c2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"a5839a0e_44eebdf8","updated":"2026-08-19 08:39:31.000000000","message":"run-netapp ci","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":124,"context_line":"        self.features.add_feature(\u0027NAE_SUPPORT\u0027, supported\u003dontap_9_6)"},{"line_number":125,"context_line":"        self.features.add_feature(\u0027VOLUME_TAGS\u0027, supported\u003dontap_9_14_1)"},{"line_number":126,"context_line":"        self.features.add_feature(\u0027CG_REST_SNAPSHOT\u0027, supported\u003dontap_9_11_1)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _invoke_vserver_api(self, na_element, vserver):"},{"line_number":129,"context_line":"        server \u003d copy.copy(self.connection)"}],"source_content_type":"text/x-python","patch_set":15,"id":"657d137f_e1e97453","line":126,"range":{"start_line":126,"start_character":35,"end_line":126,"end_character":51},"updated":"2026-07-23 19:52:32.000000000","message":"Change it to CG_SNAPSHOT, we should not make it specific to REST, feature should be common for REST and ZAPI.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":124,"context_line":"        self.features.add_feature(\u0027NAE_SUPPORT\u0027, supported\u003dontap_9_6)"},{"line_number":125,"context_line":"        self.features.add_feature(\u0027VOLUME_TAGS\u0027, supported\u003dontap_9_14_1)"},{"line_number":126,"context_line":"        self.features.add_feature(\u0027CG_REST_SNAPSHOT\u0027, supported\u003dontap_9_11_1)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _invoke_vserver_api(self, na_element, vserver):"},{"line_number":129,"context_line":"        server \u003d copy.copy(self.connection)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5382103d_2b486fc4","line":126,"range":{"start_line":126,"start_character":35,"end_line":126,"end_character":51},"in_reply_to":"657d137f_e1e97453","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"17a327175efb4b52b328e89275c2ec8257b78d88","unresolved":true,"context_lines":[{"line_number":333,"context_line":"            return True"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    @na_utils.trace"},{"line_number":336,"context_line":"    def create_cg_object(self, cg_name, volume_names):"},{"line_number":337,"context_line":"        \"\"\"Create a consistency group on ONTAP via REST.\"\"\""},{"line_number":338,"context_line":"        body \u003d {"},{"line_number":339,"context_line":"            \u0027name\u0027: cg_name,"}],"source_content_type":"text/x-python","patch_set":15,"id":"f1f56098_8b779cca","line":336,"updated":"2026-07-24 06:24:49.000000000","message":"Can we call it create_cg","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            return True"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    @na_utils.trace"},{"line_number":336,"context_line":"    def create_cg_object(self, cg_name, volume_names):"},{"line_number":337,"context_line":"        \"\"\"Create a consistency group on ONTAP via REST.\"\"\""},{"line_number":338,"context_line":"        body \u003d {"},{"line_number":339,"context_line":"            \u0027name\u0027: cg_name,"}],"source_content_type":"text/x-python","patch_set":15,"id":"42b447a1_96901448","line":336,"in_reply_to":"f1f56098_8b779cca","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":418,"context_line":"                % (cg_uuid, snapshot_uuid), \u0027delete\u0027)"},{"line_number":419,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":420,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":421,"context_line":"                LOG.debug(\u0027Consistency group snapshot %s was already \u0027"},{"line_number":422,"context_line":"                          \u0027deleted.\u0027, snapshot_uuid)"},{"line_number":423,"context_line":"            else:"},{"line_number":424,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"551a3007_5f2668e9","line":421,"range":{"start_line":421,"start_character":20,"end_line":421,"end_character":25},"updated":"2026-07-23 19:52:32.000000000","message":"Change it to LOG.exception","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                % (cg_uuid, snapshot_uuid), \u0027delete\u0027)"},{"line_number":419,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":420,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":421,"context_line":"                LOG.debug(\u0027Consistency group snapshot %s was already \u0027"},{"line_number":422,"context_line":"                          \u0027deleted.\u0027, snapshot_uuid)"},{"line_number":423,"context_line":"            else:"},{"line_number":424,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":15,"id":"a7e26604_d4466eab","line":421,"range":{"start_line":421,"start_character":20,"end_line":421,"end_character":25},"in_reply_to":"551a3007_5f2668e9","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"17a327175efb4b52b328e89275c2ec8257b78d88","unresolved":true,"context_lines":[{"line_number":424,"context_line":"                raise"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    @na_utils.trace"},{"line_number":427,"context_line":"    def delete_cg_object(self, cg_uuid):"},{"line_number":428,"context_line":"        \"\"\"Delete a consistency group (member volumes are not deleted).\"\"\""},{"line_number":429,"context_line":"        try:"},{"line_number":430,"context_line":"            self.send_request("}],"source_content_type":"text/x-python","patch_set":15,"id":"aaab10c5_aca4a185","line":427,"updated":"2026-07-24 06:24:49.000000000","message":"can call it delete_cg","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                raise"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    @na_utils.trace"},{"line_number":427,"context_line":"    def delete_cg_object(self, cg_uuid):"},{"line_number":428,"context_line":"        \"\"\"Delete a consistency group (member volumes are not deleted).\"\"\""},{"line_number":429,"context_line":"        try:"},{"line_number":430,"context_line":"            self.send_request("}],"source_content_type":"text/x-python","patch_set":15,"id":"21073302_df0addcc","line":427,"in_reply_to":"aaab10c5_aca4a185","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":431,"context_line":"                \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027delete\u0027)"},{"line_number":432,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":433,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":434,"context_line":"                LOG.debug(\u0027Consistency group %s was already deleted.\u0027, cg_uuid)"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                raise"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"8f556fe4_e1814aba","line":434,"range":{"start_line":434,"start_character":20,"end_line":434,"end_character":25},"updated":"2026-07-23 19:52:32.000000000","message":"Same as above","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027delete\u0027)"},{"line_number":432,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":433,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":434,"context_line":"                LOG.debug(\u0027Consistency group %s was already deleted.\u0027, cg_uuid)"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                raise"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"a8e35993_b34a5783","line":434,"range":{"start_line":434,"start_character":20,"end_line":434,"end_character":25},"in_reply_to":"8f556fe4_e1814aba","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":true,"context_lines":[{"line_number":353,"context_line":"        query \u003d {"},{"line_number":354,"context_line":"            \u0027name\u0027: cg_name,"},{"line_number":355,"context_line":"            \u0027svm.name\u0027: self.vserver,"},{"line_number":356,"context_line":"            \u0027fields\u0027: \u0027uuid\u0027,"},{"line_number":357,"context_line":"        }"},{"line_number":358,"context_line":"        result \u003d self.send_request(\u0027/application/consistency-groups\u0027, \u0027get\u0027,"},{"line_number":359,"context_line":"                                   query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7bb4c8e7_40997592","line":356,"updated":"2026-07-29 13:49:10.000000000","message":"You do not need to send uuid as fields as by default ONTAP returns name and uuid.","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"e3b64ff136f5c537d85fbd64e5c53be0cd79ea2f","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        query \u003d {"},{"line_number":354,"context_line":"            \u0027name\u0027: cg_name,"},{"line_number":355,"context_line":"            \u0027svm.name\u0027: self.vserver,"},{"line_number":356,"context_line":"            \u0027fields\u0027: \u0027uuid\u0027,"},{"line_number":357,"context_line":"        }"},{"line_number":358,"context_line":"        result \u003d self.send_request(\u0027/application/consistency-groups\u0027, \u0027get\u0027,"},{"line_number":359,"context_line":"                                   query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":20,"id":"16f35988_d414ead9","line":356,"in_reply_to":"7bb4c8e7_40997592","updated":"2026-07-30 06:23:46.000000000","message":"Done","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":true,"context_lines":[{"line_number":366,"context_line":"    def get_cg_volume_names(self, cg_uuid):"},{"line_number":367,"context_line":"        \"\"\"Return the set of FlexVol names currently in a consistency group.\"\"\""},{"line_number":368,"context_line":"        query \u003d {\u0027fields\u0027: \u0027volumes.name\u0027}"},{"line_number":369,"context_line":"        result \u003d self.send_request("},{"line_number":370,"context_line":"            \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027get\u0027, query\u003dquery)"},{"line_number":371,"context_line":"        return {volume[\u0027name\u0027] for volume in result.get(\u0027volumes\u0027, [])}"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":20,"id":"06a5f18a_e74399a2","line":370,"range":{"start_line":369,"start_character":0,"end_line":370,"end_character":79},"updated":"2026-07-29 13:49:10.000000000","message":"We are not checking if result in none here. In case the CG is removed from backend, we should be able to except.","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"e3b64ff136f5c537d85fbd64e5c53be0cd79ea2f","unresolved":false,"context_lines":[{"line_number":366,"context_line":"    def get_cg_volume_names(self, cg_uuid):"},{"line_number":367,"context_line":"        \"\"\"Return the set of FlexVol names currently in a consistency group.\"\"\""},{"line_number":368,"context_line":"        query \u003d {\u0027fields\u0027: \u0027volumes.name\u0027}"},{"line_number":369,"context_line":"        result \u003d self.send_request("},{"line_number":370,"context_line":"            \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027get\u0027, query\u003dquery)"},{"line_number":371,"context_line":"        return {volume[\u0027name\u0027] for volume in result.get(\u0027volumes\u0027, [])}"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":20,"id":"8e73d09f_c789d7e9","line":370,"range":{"start_line":369,"start_character":0,"end_line":370,"end_character":79},"in_reply_to":"06a5f18a_e74399a2","updated":"2026-07-30 06:23:46.000000000","message":"Done","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5135265e0635461b72b8194b5f93b9a15a8fb59","unresolved":true,"context_lines":[{"line_number":439,"context_line":"                % (cg_uuid, snapshot_uuid), \u0027delete\u0027)"},{"line_number":440,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":441,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":442,"context_line":"                LOG.exception(\u0027Consistency group snapshot %s was already \u0027"},{"line_number":443,"context_line":"                              \u0027deleted.\u0027, snapshot_uuid)"},{"line_number":444,"context_line":"            else:"},{"line_number":445,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":27,"id":"0e16729b_15d29c99","line":442,"updated":"2026-08-24 06:14:07.000000000","message":"`LOG.warning` on the \"already deleted\" path; doesn\u0027t have to be an exception.","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"7fcd39d84c9e948fb8f295b5645e9d5be500cf98","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                % (cg_uuid, snapshot_uuid), \u0027delete\u0027)"},{"line_number":440,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":441,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":442,"context_line":"                LOG.exception(\u0027Consistency group snapshot %s was already \u0027"},{"line_number":443,"context_line":"                              \u0027deleted.\u0027, snapshot_uuid)"},{"line_number":444,"context_line":"            else:"},{"line_number":445,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":27,"id":"db95e36c_fd548812","line":442,"in_reply_to":"0e16729b_15d29c99","updated":"2026-08-24 07:42:45.000000000","message":"Done","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5135265e0635461b72b8194b5f93b9a15a8fb59","unresolved":true,"context_lines":[{"line_number":451,"context_line":"            self.send_request("},{"line_number":452,"context_line":"                \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027delete\u0027)"},{"line_number":453,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":454,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":455,"context_line":"                LOG.exception(\u0027Consistency group %s was already deleted.\u0027,"},{"line_number":456,"context_line":"                              cg_uuid)"},{"line_number":457,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"52bec3bc_dbab3465","line":454,"updated":"2026-08-24 06:14:07.000000000","message":"If ONTAP returns `EREST_CG_NOT_FOUND` for a delete of an already-gone CG, this re-raises killing our expectation for idempotent deletions.","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"7fcd39d84c9e948fb8f295b5645e9d5be500cf98","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            self.send_request("},{"line_number":452,"context_line":"                \u0027/application/consistency-groups/%s\u0027 % cg_uuid, \u0027delete\u0027)"},{"line_number":453,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":454,"context_line":"            if e.code \u003d\u003d netapp_api.EREST_ENTRY_NOT_FOUND:"},{"line_number":455,"context_line":"                LOG.exception(\u0027Consistency group %s was already deleted.\u0027,"},{"line_number":456,"context_line":"                              cg_uuid)"},{"line_number":457,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"399de818_040e3287","line":454,"in_reply_to":"52bec3bc_dbab3465","updated":"2026-08-24 07:42:45.000000000","message":"Done","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5135265e0635461b72b8194b5f93b9a15a8fb59","unresolved":true,"context_lines":[{"line_number":2727,"context_line":"        try:"},{"line_number":2728,"context_line":"            self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027,"},{"line_number":2729,"context_line":"                              body\u003dbody, wait_on_accepted\u003dFalse)"},{"line_number":2730,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2731,"context_line":"            if e.code in (netapp_api.EVOLUMEDOESNOTEXIST,"},{"line_number":2732,"context_line":"                          netapp_api.EVOLNOTCLONE,"},{"line_number":2733,"context_line":"                          netapp_api.EVOLOPNOTUNDERWAY):"}],"source_content_type":"text/x-python","patch_set":27,"id":"e7b116b8_cf76030e","line":2730,"updated":"2026-08-24 06:14:07.000000000","message":"The commit fixes the `netapp_api.NaApiError` -\u003e `netapp_api.api.NaApiError` AttributeError in the soft-delete fallback, but the fix looks incomplete: the same broken bare reference still exists at lines 2730, 6718, and 6729 (here `netapp_api` is the `rest_api` module, which doesn\u0027t expose `NaApiError` directly). Those `except` clauses would raise `AttributeError` and mask the real error whenever the try block fails. Since this patch already targets that exact bug class, could you fix these three too while you\u0027re here?","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"7fcd39d84c9e948fb8f295b5645e9d5be500cf98","unresolved":false,"context_lines":[{"line_number":2727,"context_line":"        try:"},{"line_number":2728,"context_line":"            self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027,"},{"line_number":2729,"context_line":"                              body\u003dbody, wait_on_accepted\u003dFalse)"},{"line_number":2730,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2731,"context_line":"            if e.code in (netapp_api.EVOLUMEDOESNOTEXIST,"},{"line_number":2732,"context_line":"                          netapp_api.EVOLNOTCLONE,"},{"line_number":2733,"context_line":"                          netapp_api.EVOLOPNOTUNDERWAY):"}],"source_content_type":"text/x-python","patch_set":27,"id":"17ad1418_609aa1e0","line":2730,"in_reply_to":"e7b116b8_cf76030e","updated":"2026-08-24 07:42:45.000000000","message":"Done","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"eca2d1ea9c81efe389b821ba4636b1236e5698e0","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"        \"\"\"Creates a consistency group snapshot.\"\"\""},{"line_number":3001,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"},{"line_number":3002,"context_line":""},{"line_number":3003,"context_line":"        # TODO: Check protected_via_share_server_replica on share_group"},{"line_number":3004,"context_line":"        # when it becomes available. If the group is already protected via"},{"line_number":3005,"context_line":"        # share-server-level replication (SVM DR), CG snapshot behavior may"},{"line_number":3006,"context_line":"        # need to be skipped or adjusted."}],"source_content_type":"text/x-python","patch_set":1,"id":"62542462_e0102754","line":3003,"updated":"2026-06-25 14:31:52.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"63e55e1c9b7b5d61fee9075acc199f30575df9df"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e27dc6e630a14409c2ae75e936c1066966275399","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        return cg_uuid"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _add_share_to_group(self, context, share, sg_id, vserver_client,"},{"line_number":398,"context_line":"                             vserver\u003dNone):"},{"line_number":399,"context_line":"        \"\"\"Add a share volume to the ONTAP consistency group for a group."},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        If no CG object exists yet, one is created including the new share"}],"source_content_type":"text/x-python","patch_set":4,"id":"0264ffb6_9170dd69","line":398,"updated":"2026-07-08 08:51:20.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"fdba56f78131ea7c0b6eb33f2b83bd023ac4ecf4"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"ac11c387ff22e9ce0662bd183c3fc2bc25caad5b","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from manila.common import constants"},{"line_number":41,"context_line":"from manila import coordination"},{"line_number":42,"context_line":"from manila import db"},{"line_number":43,"context_line":"from manila import exception"},{"line_number":44,"context_line":"from manila.i18n import _"},{"line_number":45,"context_line":"from manila.message import api as message_api"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba166d9f_daa98b51","line":42,"updated":"2026-07-16 03:49:32.000000000","message":"Why are we making db calls from driver code?","commit_id":"4d3b1fdac6faec76a758facd52f030cee3f31d96"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"afe0ed459e68fedf713b19ab56ed8ed2dd32d753","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from manila.common import constants"},{"line_number":41,"context_line":"from manila import coordination"},{"line_number":42,"context_line":"from manila import db"},{"line_number":43,"context_line":"from manila import exception"},{"line_number":44,"context_line":"from manila.i18n import _"},{"line_number":45,"context_line":"from manila.message import api as message_api"}],"source_content_type":"text/x-python","patch_set":8,"id":"a92deee4_e027f8c7","line":42,"in_reply_to":"ba166d9f_daa98b51","updated":"2026-07-16 06:54:56.000000000","message":"Done","commit_id":"4d3b1fdac6faec76a758facd52f030cee3f31d96"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"88ba5e3a4f27d40551f0149487500423c5a9f8cf","unresolved":false,"context_lines":[{"line_number":930,"context_line":""},{"line_number":931,"context_line":"    @na_utils.trace"},{"line_number":932,"context_line":"    def create_share(self, context, share, share_server,"},{"line_number":933,"context_line":"                      share_group_members\u003dNone):"},{"line_number":934,"context_line":"        \"\"\"Creates new share.\"\"\""},{"line_number":935,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"},{"line_number":936,"context_line":"        self._allocate_container(share, vserver, vserver_client)"}],"source_content_type":"text/x-python","patch_set":9,"id":"12f7f18b_d4673ffc","line":933,"updated":"2026-07-16 08:24:26.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"003ec5c1a50488cd6e743ccc67bf9eece295baf8"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5bff9121209eebda7be9cb95735da71827b18499","unresolved":true,"context_lines":[{"line_number":3143,"context_line":"        \"\"\"Delete a share group, removing the ONTAP CG object if present.\"\"\""},{"line_number":3144,"context_line":"        cg_uuid \u003d self.private_storage.get(share_group_dict[\u0027id\u0027], \u0027cg_uuid\u0027)"},{"line_number":3145,"context_line":"        if not cg_uuid:"},{"line_number":3146,"context_line":"            return None, None"},{"line_number":3147,"context_line":""},{"line_number":3148,"context_line":"        try:"},{"line_number":3149,"context_line":"            vserver, vserver_client \u003d self._get_vserver("}],"source_content_type":"text/x-python","patch_set":10,"id":"c3abce2b_36ea27a2","line":3146,"updated":"2026-07-23 09:15:12.000000000","message":"Why are we returning None, None? Applicable for all occurrences in this file \nPlease verify the signature of API at manila/share/driver.py.","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":3143,"context_line":"        \"\"\"Delete a share group, removing the ONTAP CG object if present.\"\"\""},{"line_number":3144,"context_line":"        cg_uuid \u003d self.private_storage.get(share_group_dict[\u0027id\u0027], \u0027cg_uuid\u0027)"},{"line_number":3145,"context_line":"        if not cg_uuid:"},{"line_number":3146,"context_line":"            return None, None"},{"line_number":3147,"context_line":""},{"line_number":3148,"context_line":"        try:"},{"line_number":3149,"context_line":"            vserver, vserver_client \u003d self._get_vserver("}],"source_content_type":"text/x-python","patch_set":10,"id":"5479fdb1_4c1ab347","line":3146,"in_reply_to":"c3abce2b_36ea27a2","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5bff9121209eebda7be9cb95735da71827b18499","unresolved":true,"context_lines":[{"line_number":3159,"context_line":""},{"line_number":3160,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":3161,"context_line":"        if cg_client is not None:"},{"line_number":3162,"context_line":"            cg_client.delete_cg_object(cg_uuid)"},{"line_number":3163,"context_line":"            self.private_storage.delete(share_group_dict[\u0027id\u0027])"},{"line_number":3164,"context_line":"        return None, None"},{"line_number":3165,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"53011692_61bb62d1","line":3162,"updated":"2026-07-23 09:15:12.000000000","message":"Log exception in case of failure?","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":3159,"context_line":""},{"line_number":3160,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":3161,"context_line":"        if cg_client is not None:"},{"line_number":3162,"context_line":"            cg_client.delete_cg_object(cg_uuid)"},{"line_number":3163,"context_line":"            self.private_storage.delete(share_group_dict[\u0027id\u0027])"},{"line_number":3164,"context_line":"        return None, None"},{"line_number":3165,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"d5f387d9_c45662f5","line":3162,"in_reply_to":"53011692_61bb62d1","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":348,"context_line":"        if isinstance(vserver_client, client_cmode_rest.NetAppRestClient):"},{"line_number":349,"context_line":"            return vserver_client"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not vserver_client.features.CG_REST_SNAPSHOT:"},{"line_number":352,"context_line":"            return None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        cg_client \u003d self._cg_rest_clients.get(vserver)"},{"line_number":355,"context_line":"        if cg_client is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"76bd4422_92418fe1","line":352,"range":{"start_line":351,"start_character":8,"end_line":352,"end_character":23},"updated":"2026-07-23 19:52:32.000000000","message":"why we are returning none here ..?","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        if isinstance(vserver_client, client_cmode_rest.NetAppRestClient):"},{"line_number":349,"context_line":"            return vserver_client"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not vserver_client.features.CG_REST_SNAPSHOT:"},{"line_number":352,"context_line":"            return None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        cg_client \u003d self._cg_rest_clients.get(vserver)"},{"line_number":355,"context_line":"        if cg_client is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"f2ccced7_6602b5fc","line":352,"range":{"start_line":351,"start_character":8,"end_line":352,"end_character":23},"in_reply_to":"76bd4422_92418fe1","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":345,"context_line":"    @na_utils.trace"},{"line_number":346,"context_line":"    def _get_cg_client(self, vserver_client, vserver\u003dNone):"},{"line_number":347,"context_line":"        \"\"\"Return a REST client for consistency group operations, or None.\"\"\""},{"line_number":348,"context_line":"        if isinstance(vserver_client, client_cmode_rest.NetAppRestClient):"},{"line_number":349,"context_line":"            return vserver_client"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not vserver_client.features.CG_REST_SNAPSHOT:"},{"line_number":352,"context_line":"            return None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        cg_client \u003d self._cg_rest_clients.get(vserver)"},{"line_number":355,"context_line":"        if cg_client is None:"},{"line_number":356,"context_line":"            LOG.warning(\u0027netapp_use_legacy_client is True but ONTAP \u003e\u003d 9.11.1 \u0027"},{"line_number":357,"context_line":"                        \u0027was detected; consistency group operations will use \u0027"},{"line_number":358,"context_line":"                        \u0027REST.\u0027)"},{"line_number":359,"context_line":"            cg_client \u003d self._get_client("},{"line_number":360,"context_line":"                self.configuration, vserver\u003dvserver, force_rest\u003dTrue)"},{"line_number":361,"context_line":"            self._cg_rest_clients[vserver] \u003d cg_client"},{"line_number":362,"context_line":"        return cg_client"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    @staticmethod"},{"line_number":365,"context_line":"    def _get_backend_cg_name():"}],"source_content_type":"text/x-python","patch_set":15,"id":"4253ce06_d4f9d0a9","line":362,"range":{"start_line":348,"start_character":8,"end_line":362,"end_character":24},"updated":"2026-07-23 19:52:32.000000000","message":"If you wanted to make sure if ONTAP version is more than 9.11.1 then us the below logic to create the client \n\nif isinstance(vserver_client, client_cmode_rest.NetAppRestClient):\n            return vserver_client\n\nelse if vserver_client.features.CG_REST_SNAPSHOT:\n   cg_client \u003d self._cg_rest_clients.get(vserver)\n        if cg_client is None:\n            LOG.warning(\u0027netapp_use_legacy_client is True but ONTAP \u003e\u003d 9.11.1 \u0027\n                        \u0027was detected; consistency group operations will use \u0027\n                        \u0027REST.\u0027)\n            cg_client \u003d self._get_client(\n                self.configuration, vserver\u003dvserver, force_rest\u003dTrue)\n            self._cg_rest_clients[vserver] \u003d cg_client\n else:\n     cg_client \u003d vserver_client or None (I am seeing you are using ZAPI client if this method returning None, in that case you can return None)\n return cg_client\n \nSo, here, we have to create the REST client only when ONTAP version is more than 9.11.1, otherwise return the client (either Rest or ZAPI)","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    @na_utils.trace"},{"line_number":346,"context_line":"    def _get_cg_client(self, vserver_client, vserver\u003dNone):"},{"line_number":347,"context_line":"        \"\"\"Return a REST client for consistency group operations, or None.\"\"\""},{"line_number":348,"context_line":"        if isinstance(vserver_client, client_cmode_rest.NetAppRestClient):"},{"line_number":349,"context_line":"            return vserver_client"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not vserver_client.features.CG_REST_SNAPSHOT:"},{"line_number":352,"context_line":"            return None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        cg_client \u003d self._cg_rest_clients.get(vserver)"},{"line_number":355,"context_line":"        if cg_client is None:"},{"line_number":356,"context_line":"            LOG.warning(\u0027netapp_use_legacy_client is True but ONTAP \u003e\u003d 9.11.1 \u0027"},{"line_number":357,"context_line":"                        \u0027was detected; consistency group operations will use \u0027"},{"line_number":358,"context_line":"                        \u0027REST.\u0027)"},{"line_number":359,"context_line":"            cg_client \u003d self._get_client("},{"line_number":360,"context_line":"                self.configuration, vserver\u003dvserver, force_rest\u003dTrue)"},{"line_number":361,"context_line":"            self._cg_rest_clients[vserver] \u003d cg_client"},{"line_number":362,"context_line":"        return cg_client"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    @staticmethod"},{"line_number":365,"context_line":"    def _get_backend_cg_name():"}],"source_content_type":"text/x-python","patch_set":15,"id":"522fff16_385c2d20","line":362,"range":{"start_line":348,"start_character":8,"end_line":362,"end_character":24},"in_reply_to":"4253ce06_d4f9d0a9","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":364,"context_line":"    @staticmethod"},{"line_number":365,"context_line":"    def _get_backend_cg_name():"},{"line_number":366,"context_line":"        \"\"\"Generate a unique ONTAP consistency group name.\"\"\""},{"line_number":367,"context_line":"        return \u0027cg_manila_\u0027 + str(int(timeutils.utcnow().timestamp() * 1e6))"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def _get_or_create_cg_uuid(self, sg_id, volume_names, cg_client):"},{"line_number":370,"context_line":"        \"\"\"Return the stored CG UUID or create and persist a new one.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"52a38919_b82b9a3d","line":367,"range":{"start_line":367,"start_character":16,"end_line":367,"end_character":26},"updated":"2026-07-23 19:52:32.000000000","message":"Change it to \u0027cg_share\u0027","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    @staticmethod"},{"line_number":365,"context_line":"    def _get_backend_cg_name():"},{"line_number":366,"context_line":"        \"\"\"Generate a unique ONTAP consistency group name.\"\"\""},{"line_number":367,"context_line":"        return \u0027cg_manila_\u0027 + str(int(timeutils.utcnow().timestamp() * 1e6))"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def _get_or_create_cg_uuid(self, sg_id, volume_names, cg_client):"},{"line_number":370,"context_line":"        \"\"\"Return the stored CG UUID or create and persist a new one.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"e1d1f34d_88d4860d","line":367,"range":{"start_line":367,"start_character":16,"end_line":367,"end_character":26},"in_reply_to":"52a38919_b82b9a3d","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def _get_or_create_cg_uuid(self, sg_id, volume_names, cg_client):"},{"line_number":370,"context_line":"        \"\"\"Return the stored CG UUID or create and persist a new one.\"\"\""},{"line_number":371,"context_line":"        cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":372,"context_line":"        if cg_uuid:"},{"line_number":373,"context_line":"            return cg_uuid"},{"line_number":374,"context_line":"        cg_name \u003d self._get_backend_cg_name()"},{"line_number":375,"context_line":"        cg_uuid \u003d cg_client.create_cg_object(cg_name, volume_names)"},{"line_number":376,"context_line":"        self.private_storage.update(sg_id, {\u0027cg_uuid\u0027: cg_uuid})"},{"line_number":377,"context_line":"        return cg_uuid"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def _add_share_to_group(self, share, sg_id, vserver_client,"}],"source_content_type":"text/x-python","patch_set":15,"id":"2f4c4690_be151f5a","line":376,"range":{"start_line":371,"start_character":8,"end_line":376,"end_character":64},"updated":"2026-07-23 19:52:32.000000000","message":"If a cache entry isn’t found, we end up creating a new consistency group every time. That means after every restart, once the cache is cleared, we will create a new ONTAP consistency group for an existing share group in OpenStack. This design doesn’t look right.\n\nInstead, we should create (or reuse) the ONTAP consistency group based on the UUID passed from the manager. First query ONTAP to check whether the consistency group already exists, and only create it if it’s not present.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"b860c02ff6e7a93d0c3efcc02192732a434f476f","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def _get_or_create_cg_uuid(self, sg_id, volume_names, cg_client):"},{"line_number":370,"context_line":"        \"\"\"Return the stored CG UUID or create and persist a new one.\"\"\""},{"line_number":371,"context_line":"        cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":372,"context_line":"        if cg_uuid:"},{"line_number":373,"context_line":"            return cg_uuid"},{"line_number":374,"context_line":"        cg_name \u003d self._get_backend_cg_name()"},{"line_number":375,"context_line":"        cg_uuid \u003d cg_client.create_cg_object(cg_name, volume_names)"},{"line_number":376,"context_line":"        self.private_storage.update(sg_id, {\u0027cg_uuid\u0027: cg_uuid})"},{"line_number":377,"context_line":"        return cg_uuid"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def _add_share_to_group(self, share, sg_id, vserver_client,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9cc59ffa_f71b2dd6","line":376,"range":{"start_line":371,"start_character":8,"end_line":376,"end_character":64},"in_reply_to":"2f4c4690_be151f5a","updated":"2026-07-28 05:46:28.000000000","message":"i tested the private_Storage thing, first i created a share group and added two shares, i restarted manila services and i created one more share. Outcome was that the newly created share was also part of previous cg, so in same cg all 3 shares were present.\nso after restart also data persists, hence not changing it","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":3010,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver)"},{"line_number":3011,"context_line":""},{"line_number":3012,"context_line":"        # ONTAP \u003c 9.11.1: fall back to ZAPI."},{"line_number":3013,"context_line":"        if cg_client is None:"},{"line_number":3014,"context_line":"            LOG.debug(\u0027Creating CG snapshot %s via ZAPI.\u0027, snapshot_name)"},{"line_number":3015,"context_line":"            vserver_client.create_cg_snapshot(share_names, snapshot_name)"},{"line_number":3016,"context_line":"            return None, None"}],"source_content_type":"text/x-python","patch_set":15,"id":"50ed1e66_5b594324","line":3013,"range":{"start_line":3013,"start_character":8,"end_line":3013,"end_character":29},"updated":"2026-07-23 19:52:32.000000000","message":"Most of the places I am seeing that you are first creating the cg_client and based on return value you are taking the decision.\n\nI will suggest you here is, you put everything in feature flag, even you create the cg_client if feature flag is enabled \nif vserver_client.features.CG_REST_SNAPSHOT:\n   cg_client \u003d self._get_cg_client(vserver_client, vserver)\n   ... REST workflow code  ..\n   \n   \n  \n Even you can change the logic to get the cg client.\n This comment is applicable for all the places","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":3010,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver)"},{"line_number":3011,"context_line":""},{"line_number":3012,"context_line":"        # ONTAP \u003c 9.11.1: fall back to ZAPI."},{"line_number":3013,"context_line":"        if cg_client is None:"},{"line_number":3014,"context_line":"            LOG.debug(\u0027Creating CG snapshot %s via ZAPI.\u0027, snapshot_name)"},{"line_number":3015,"context_line":"            vserver_client.create_cg_snapshot(share_names, snapshot_name)"},{"line_number":3016,"context_line":"            return None, None"}],"source_content_type":"text/x-python","patch_set":15,"id":"a328d851_a06a0925","line":3013,"range":{"start_line":3013,"start_character":8,"end_line":3013,"end_character":29},"in_reply_to":"50ed1e66_5b594324","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":true,"context_lines":[{"line_number":343,"context_line":"        return client"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @na_utils.trace"},{"line_number":346,"context_line":"    def _get_cg_client(self, vserver_client, vserver\u003dNone):"},{"line_number":347,"context_line":"        \"\"\"Return a REST client suitable for consistency group operations."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        In REST mode the existing vserver_client is returned directly."}],"source_content_type":"text/x-python","patch_set":20,"id":"01485c93_05a0e1c2","line":346,"range":{"start_line":346,"start_character":8,"end_line":346,"end_character":22},"updated":"2026-07-29 13:49:10.000000000","message":"An apt naming would be _get_rest_client_for_cg_operations.","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"e3b64ff136f5c537d85fbd64e5c53be0cd79ea2f","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        return client"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @na_utils.trace"},{"line_number":346,"context_line":"    def _get_cg_client(self, vserver_client, vserver\u003dNone):"},{"line_number":347,"context_line":"        \"\"\"Return a REST client suitable for consistency group operations."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        In REST mode the existing vserver_client is returned directly."}],"source_content_type":"text/x-python","patch_set":20,"id":"ac01bee5_7aed10f1","line":346,"range":{"start_line":346,"start_character":8,"end_line":346,"end_character":22},"in_reply_to":"01485c93_05a0e1c2","updated":"2026-07-30 06:23:46.000000000","message":"Done","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":true,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":389,"context_line":"        volume_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":390,"context_line":"        with coordination.Lock(sg_id):"},{"line_number":391,"context_line":"            cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":392,"context_line":"            if cg_uuid:"},{"line_number":393,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"beca25b3_be4960e1","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":38},"updated":"2026-07-29 13:49:10.000000000","message":"Why do weneed lock here? Is it because ONTAP does not allow multiple cg expands to happen at the same time? We should add comment for justifying it if so.","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"e3b64ff136f5c537d85fbd64e5c53be0cd79ea2f","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":389,"context_line":"        volume_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":390,"context_line":"        with coordination.Lock(sg_id):"},{"line_number":391,"context_line":"            cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":392,"context_line":"            if cg_uuid:"},{"line_number":393,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"d9094612_0ed57efe","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":38},"in_reply_to":"beca25b3_be4960e1","updated":"2026-07-30 06:23:46.000000000","message":"Done","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1bd112276f73a1026ddadc4fee5f46d9a087d01d","unresolved":true,"context_lines":[{"line_number":3175,"context_line":""},{"line_number":3176,"context_line":"        if vserver_client.features.CG_SNAPSHOT:"},{"line_number":3177,"context_line":"            cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":3178,"context_line":"            cg_client.delete_cg(cg_uuid)"},{"line_number":3179,"context_line":"            self.private_storage.delete(share_group_dict[\u0027id\u0027])"},{"line_number":3180,"context_line":"        return None"},{"line_number":3181,"context_line":""},{"line_number":3182,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":20,"id":"2f8bad74_faa49705","line":3179,"range":{"start_line":3178,"start_character":12,"end_line":3179,"end_character":63},"updated":"2026-07-29 13:49:10.000000000","message":"Shouldnt we check if the delete call went through? also the exception handling from client is missing? In the case where CG delete fails, is delete_share_group an idempotent call?","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"e3b64ff136f5c537d85fbd64e5c53be0cd79ea2f","unresolved":false,"context_lines":[{"line_number":3175,"context_line":""},{"line_number":3176,"context_line":"        if vserver_client.features.CG_SNAPSHOT:"},{"line_number":3177,"context_line":"            cg_client \u003d self._get_cg_client(vserver_client, vserver\u003dvserver)"},{"line_number":3178,"context_line":"            cg_client.delete_cg(cg_uuid)"},{"line_number":3179,"context_line":"            self.private_storage.delete(share_group_dict[\u0027id\u0027])"},{"line_number":3180,"context_line":"        return None"},{"line_number":3181,"context_line":""},{"line_number":3182,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f3f5ef7_52df1528","line":3179,"range":{"start_line":3178,"start_character":12,"end_line":3179,"end_character":63},"in_reply_to":"2f8bad74_faa49705","updated":"2026-07-30 06:23:46.000000000","message":"Done","commit_id":"6f9a44b529fdc95db8b459763010f7fff50d6a50"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5135265e0635461b72b8194b5f93b9a15a8fb59","unresolved":true,"context_lines":[{"line_number":390,"context_line":"        volume_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":391,"context_line":"        # Lock ensures concurrent share creations in the same group do not"},{"line_number":392,"context_line":"        # race to create duplicate ONTAP consistency groups."},{"line_number":393,"context_line":"        with coordination.Lock(sg_id):"},{"line_number":394,"context_line":"            cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":395,"context_line":"            if cg_uuid:"},{"line_number":396,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":27,"id":"4ebe279f_019edb3d","line":393,"updated":"2026-08-24 06:14:07.000000000","message":"maybe use `\u0027netapp-cg-{sg_id}\u0027` (or similar).","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"a086206c17988d6a7901cdb8e5d01da8ff66cfd1","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        volume_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":391,"context_line":"        # Lock ensures concurrent share creations in the same group do not"},{"line_number":392,"context_line":"        # race to create duplicate ONTAP consistency groups."},{"line_number":393,"context_line":"        with coordination.Lock(sg_id):"},{"line_number":394,"context_line":"            cg_uuid \u003d self.private_storage.get(sg_id, \u0027cg_uuid\u0027)"},{"line_number":395,"context_line":"            if cg_uuid:"},{"line_number":396,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":27,"id":"b2e5ea27_0b175126","line":393,"in_reply_to":"4ebe279f_019edb3d","updated":"2026-08-24 07:30:40.000000000","message":"The name is only used at creation time — afterwards the ONTAP CG UUID is what\u0027s stored and used for all operations. A timestamp also avoids a duplicate-name collision if a stale CG with the same share-group-derived name still exists on ONTAP when recreating. Happy to change if you feel strongly.","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5135265e0635461b72b8194b5f93b9a15a8fb59","unresolved":true,"context_lines":[{"line_number":3023,"context_line":"        return clone_list"},{"line_number":3024,"context_line":""},{"line_number":3025,"context_line":"    @na_utils.trace"},{"line_number":3026,"context_line":"    def create_cgsnapshot(self, context, snap_dict, share_server\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Creates a consistency group snapshot.\"\"\""},{"line_number":3028,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"},{"line_number":3029,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"fcb2efa8_72c7ff8d","line":3026,"updated":"2026-08-24 06:14:07.000000000","message":"`_add_share_to_group` serializes CG create/modify under `coordination.Lock(sg_id)`, but `create_cgsnapshot` calls `add_volumes_to_cg` without holding a lock. If a share is added to the group concurrently with a group-snapshot request, the two paths could race on `cg_uuid`? are we missing a lock?","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"7fcd39d84c9e948fb8f295b5645e9d5be500cf98","unresolved":false,"context_lines":[{"line_number":3023,"context_line":"        return clone_list"},{"line_number":3024,"context_line":""},{"line_number":3025,"context_line":"    @na_utils.trace"},{"line_number":3026,"context_line":"    def create_cgsnapshot(self, context, snap_dict, share_server\u003dNone):"},{"line_number":3027,"context_line":"        \"\"\"Creates a consistency group snapshot.\"\"\""},{"line_number":3028,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"},{"line_number":3029,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1e980e3d_92735ae3","line":3026,"in_reply_to":"fcb2efa8_72c7ff8d","updated":"2026-08-24 07:42:45.000000000","message":"Done","commit_id":"4752c02bf9a759f3cf4a3ca1146477a016e163b6"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"88ba5e3a4f27d40551f0149487500423c5a9f8cf","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"},{"line_number":1181,"context_line":"        return super(NetAppCmodeMultiSVMFileStorageLibrary,"},{"line_number":1182,"context_line":"                     self).create_share(context, share, share_server,"},{"line_number":1183,"context_line":"                                        share_group_members\u003dshare_group_members)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"    @na_utils.trace"},{"line_number":1186,"context_line":"    def _reconcile_dns_for_share_server(self, context, share_server):"}],"source_content_type":"text/x-python","patch_set":9,"id":"f2a2ccfe_9d4f27b7","line":1183,"updated":"2026-07-16 08:24:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"003ec5c1a50488cd6e743ccc67bf9eece295baf8"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5bff9121209eebda7be9cb95735da71827b18499","unresolved":true,"context_lines":[{"line_number":1174,"context_line":"        self._client.delete_vserver_peer(vserver, peer_vserver)"},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"    @na_utils.trace"},{"line_number":1177,"context_line":"    def create_share(self, context, share, share_server,"},{"line_number":1178,"context_line":"                     share_group_members\u003dNone):"},{"line_number":1179,"context_line":"        \"\"\"Reconcile DNS on reused share servers before provisioning.\"\"\""},{"line_number":1180,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"}],"source_content_type":"text/x-python","patch_set":10,"id":"4d029afc_153757fe","line":1177,"updated":"2026-07-23 09:15:12.000000000","message":"Please update the manila/share/driver.py docstring with this param.","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"        self._client.delete_vserver_peer(vserver, peer_vserver)"},{"line_number":1175,"context_line":""},{"line_number":1176,"context_line":"    @na_utils.trace"},{"line_number":1177,"context_line":"    def create_share(self, context, share, share_server,"},{"line_number":1178,"context_line":"                     share_group_members\u003dNone):"},{"line_number":1179,"context_line":"        \"\"\"Reconcile DNS on reused share servers before provisioning.\"\"\""},{"line_number":1180,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"}],"source_content_type":"text/x-python","patch_set":10,"id":"2e3a6d68_dcdd2b5f","line":1177,"in_reply_to":"4d029afc_153757fe","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"c1855049d61c933ffc797bc1c0ba5165bd345d96"}],"manila/share/manager.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[{"line_number":2368,"context_line":"                        raise exception.InvalidShareInstance(reason\u003dmsg)"},{"line_number":2369,"context_line":"                    export_locations \u003d model_update.get(\u0027export_locations\u0027)"},{"line_number":2370,"context_line":"            else:"},{"line_number":2371,"context_line":"                if share_instance.get(\u0027share_group_id\u0027):"},{"line_number":2372,"context_line":"                    share_instance[\u0027share_group_members\u0027] \u003d ("},{"line_number":2373,"context_line":"                        self.db.share_instance_get_all_by_share_group_id("},{"line_number":2374,"context_line":"                            context, share_instance[\u0027share_group_id\u0027]))"},{"line_number":2375,"context_line":"                export_locations \u003d self.driver.create_share("},{"line_number":2376,"context_line":"                    context, share_instance, share_server\u003dshare_server)"},{"line_number":2377,"context_line":"            if status not in [constants.STATUS_AVAILABLE,"},{"line_number":2378,"context_line":"                              constants.STATUS_CREATING_FROM_SNAPSHOT]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"a3b004f7_63e39017","line":2375,"range":{"start_line":2371,"start_character":16,"end_line":2375,"end_character":60},"updated":"2026-07-23 19:52:32.000000000","message":"We are using the share from snapshot, line no- 2354. In that case also we need to add the same code. Can you move this code before share creation from snapshot, you can put after try block so that this common code can be use for both the workflow - share creation and share creation from snapshot.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"                        raise exception.InvalidShareInstance(reason\u003dmsg)"},{"line_number":2369,"context_line":"                    export_locations \u003d model_update.get(\u0027export_locations\u0027)"},{"line_number":2370,"context_line":"            else:"},{"line_number":2371,"context_line":"                if share_instance.get(\u0027share_group_id\u0027):"},{"line_number":2372,"context_line":"                    share_instance[\u0027share_group_members\u0027] \u003d ("},{"line_number":2373,"context_line":"                        self.db.share_instance_get_all_by_share_group_id("},{"line_number":2374,"context_line":"                            context, share_instance[\u0027share_group_id\u0027]))"},{"line_number":2375,"context_line":"                export_locations \u003d self.driver.create_share("},{"line_number":2376,"context_line":"                    context, share_instance, share_server\u003dshare_server)"},{"line_number":2377,"context_line":"            if status not in [constants.STATUS_AVAILABLE,"},{"line_number":2378,"context_line":"                              constants.STATUS_CREATING_FROM_SNAPSHOT]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3b24b131_e462647f","line":2375,"range":{"start_line":2371,"start_character":16,"end_line":2375,"end_character":60},"in_reply_to":"a3b004f7_63e39017","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"}],"manila/tests/fake_driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a6fc22a5ec4381698d61b96dad320d733b6ae561","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        pass"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def create_share(self, context, share, share_server\u003dNone,"},{"line_number":74,"context_line":"                      share_group_members\u003dNone):"},{"line_number":75,"context_line":"        return [\u0027/fake/path\u0027, \u0027/fake/path2\u0027]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5b42514b_b6d37882","line":74,"updated":"2026-07-17 03:29:39.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"9b3d7f7b894afdf7466e39505112c3fe0c871971"}],"manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"88ba5e3a4f27d40551f0149487500423c5a9f8cf","unresolved":false,"context_lines":[{"line_number":4046,"context_line":"            vserver\u003dfake.VSERVER1, share_group_members\u003dexisting_members)"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":"        volume_name \u003d self.library._get_backend_share_name(fake.SHARE[\u0027id\u0027])"},{"line_number":4049,"context_line":"        other_volume_name \u003d self.library._get_backend_share_name(other_share_id)"},{"line_number":4050,"context_line":"        mock_create.assert_called_once_with("},{"line_number":4051,"context_line":"            \u0027fake_sg_id\u0027, [other_volume_name, volume_name], cg_client)"},{"line_number":4052,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"231db571_c623cac9","line":4049,"updated":"2026-07-16 08:24:26.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"003ec5c1a50488cd6e743ccc67bf9eece295baf8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c64d8bc3204e5f0bdbdab663e454592374dc06e9","unresolved":false,"context_lines":[{"line_number":4046,"context_line":"            vserver\u003dfake.VSERVER1, share_group_members\u003dexisting_members)"},{"line_number":4047,"context_line":""},{"line_number":4048,"context_line":"        volume_name \u003d self.library._get_backend_share_name(fake.SHARE[\u0027id\u0027])"},{"line_number":4049,"context_line":"        other_volume_name \u003d self.library._get_backend_share_name("},{"line_number":4050,"context_line":"            other_instance_id)"},{"line_number":4051,"context_line":"        mock_create.assert_called_once_with("},{"line_number":4052,"context_line":"            \u0027fake_sg_id\u0027, [other_volume_name, volume_name], cg_client)"}],"source_content_type":"text/x-python","patch_set":14,"id":"533fef0d_c85a48b8","line":4049,"updated":"2026-07-17 08:58:54.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"b1de147f07c13c07af68c22c6d9e33f1d8f0c713"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":3768,"context_line":"            share_server\u003dfake.SHARE_SERVER)"},{"line_number":3769,"context_line":""},{"line_number":3770,"context_line":"    def test_create_cgsnapshot_rest_existing_cg(self):"},{"line_number":3771,"context_line":"        \"\"\"CG-REST-001: REST path creates CG snapshot when CG already exists.\"\"\""},{"line_number":3772,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":3773,"context_line":"        cg_client \u003d mock.Mock()"},{"line_number":3774,"context_line":"        cg_client.get_cg_volume_names.return_value \u003d set(["}],"source_content_type":"text/x-python","patch_set":16,"id":"19736c34_033f8647","line":3771,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":3836,"context_line":"                fake.CG_SNAPSHOT_MEMBER_2[\u0027share_id\u0027]),"},{"line_number":3837,"context_line":"        ]"},{"line_number":3838,"context_line":"        self.assertFalse(cg_client.get_cg_uuid.called)"},{"line_number":3839,"context_line":"        cg_client.create_cg.assert_called_once_with(\u0027fake_cg_name\u0027, share_names)"},{"line_number":3840,"context_line":"        snapshot_name \u003d self.library._get_backend_cg_snapshot_name("},{"line_number":3841,"context_line":"            fake.CG_SNAPSHOT[\u0027id\u0027])"},{"line_number":3842,"context_line":"        cg_client.create_cg_snapshot.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"3a3045f4_e4c3af15","line":3839,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":3911,"context_line":"        self.mock_object("},{"line_number":3912,"context_line":"            self.library, \u0027_get_cg_client\u0027,"},{"line_number":3913,"context_line":"            mock.Mock(return_value\u003dcg_client))"},{"line_number":3914,"context_line":"        mock_ps_get \u003d self.mock_object("},{"line_number":3915,"context_line":"            self.library.private_storage, \u0027get\u0027,"},{"line_number":3916,"context_line":"            mock.Mock(side_effect\u003dlambda key, field\u003dNone: {"},{"line_number":3917,"context_line":"                (fake.CONSISTENCY_GROUP_ID, \u0027cg_uuid\u0027): \u0027fake_cg_uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"39cdaf68_18f3717f","line":3914,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: F841 local variable \u0027mock_ps_get\u0027 is assigned to but never used","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":3931,"context_line":"            fake.CG_SNAPSHOT_ID, \u0027cg_snapshot_uuid\u0027)"},{"line_number":3932,"context_line":""},{"line_number":3933,"context_line":"    def test_delete_cgsnapshot_rest_falls_through_for_pre_upgrade(self):"},{"line_number":3934,"context_line":"        \"\"\"CG-REST-002: Falls through to per-volume delete for old snapshots.\"\"\""},{"line_number":3935,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":3936,"context_line":"        cg_client \u003d mock.Mock()"},{"line_number":3937,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":16,"id":"7cab7464_9a9f7eb7","line":3934,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":4106,"context_line":"            self.context, fake.CONSISTENCY_GROUP,"},{"line_number":4107,"context_line":"            share_server\u003dfake.SHARE_SERVER)"},{"line_number":4108,"context_line":""},{"line_number":4109,"context_line":"        self.assertEqual(None, result)"},{"line_number":4110,"context_line":"        cg_client.delete_cg.assert_called_once_with(\u0027fake_cg_uuid\u0027)"},{"line_number":4111,"context_line":"        mock_delete.assert_called_once_with(fake.CONSISTENCY_GROUP[\u0027id\u0027])"},{"line_number":4112,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5d25ca3a_10602de9","line":4109,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"128609b0b7ec77f1a8a898f2025602b4c2653093","unresolved":false,"context_lines":[{"line_number":4121,"context_line":"            self.context, fake.CONSISTENCY_GROUP,"},{"line_number":4122,"context_line":"            share_server\u003dfake.SHARE_SERVER)"},{"line_number":4123,"context_line":""},{"line_number":4124,"context_line":"        self.assertEqual(None, result)"},{"line_number":4125,"context_line":"        self.assertFalse(mock_get_vserver.called)"},{"line_number":4126,"context_line":""},{"line_number":4127,"context_line":"    def test__add_share_to_group_no_cg_client(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fe7095e8_0b5ba1ad","line":4124,"updated":"2026-07-28 07:20:38.000000000","message":"pep8: H203: Use assertIs(Not)None to check for None","commit_id":"b7d09210211b7bc2ffd5d7c6dd024d3e24fbf419"}],"releasenotes/notes/netapp-cg-snapshot-rest-delete-share-group-4ac419d61ad24405.yaml":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47bdc532ab5b4e72b3d5cd9f6598ab8199192b4a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"fd712641_f8f01ee3","line":10,"range":{"start_line":2,"start_character":1,"end_line":10,"end_character":0},"updated":"2026-07-23 19:52:32.000000000","message":"It is better to make it either feature or fixes, keep one. Better to make it feature and remove the fixes part.","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"8a9009816a96bd054369a2a28bcfdbee615caaf9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"977bbc59_87df8914","line":10,"range":{"start_line":2,"start_character":1,"end_line":10,"end_character":0},"in_reply_to":"fd712641_f8f01ee3","updated":"2026-07-28 05:22:15.000000000","message":"Done","commit_id":"5fe19fcaa165af28d28fca1d0961aa2050f5d5ad"}]}
