)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"519c75d5_0be6988f","updated":"2025-02-25 18:12:43.000000000","message":"Overall the flow looks good. Request you to address the comments.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"38ae2492_d26f6747","updated":"2025-02-26 19:16:34.000000000","message":"Great job on this change, Gireesh!\nCouple of comments inline, please take a look at them","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e4789229_64f2e10a","updated":"2025-02-26 11:56:04.000000000","message":"Thanks Saravanan for your review comments, I resolved most of them, please re-open the comment if you are not agree.","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"379b64067e63a03d8a9b126682bd7f3f258eb7dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b05b5b7a_383b2b6a","updated":"2025-02-27 14:29:04.000000000","message":"LGTM, thanks Gireesh","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"b21644ea2fa3f509b6eb4af6acaca811d70d630b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"33993cba_3040e0f8","updated":"2025-02-27 14:03:45.000000000","message":"Looks good.","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ed4a9d0d_f9d83345","updated":"2025-02-27 10:05:53.000000000","message":"Thanks Caloss for your review comments, I incorporated all, feel free to open the comment if you are not agree.","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a4ff91ad0030169959a5c16dcc8ac3102ad22cf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c826bd1b_ec934086","updated":"2025-02-27 14:26:20.000000000","message":"recheck\nLVM driver job failed with two known issues","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6fe779ec3c9bf3dc471fe0788bfd8d57777db69f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6b68f58f_609f4f18","updated":"2025-02-27 14:32:33.000000000","message":"small suggestion - in releasenotes, \n\"support to prevents \" should be \"supports to prevent\"","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5b5bb71ec7f6d925d532551d1853080ccbfb2515","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d142ae6b_b969276f","in_reply_to":"6b68f58f_609f4f18","updated":"2025-02-27 15:06:06.000000000","message":"Done","commit_id":"7d3d0127cf9685ec4263f824189bb7e3494277d4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"aae7e63b_56aea60c","updated":"2025-02-28 10:42:13.000000000","message":"Thanks Goutham for your review comments, there is one open comment could you please response to that.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5bcc7985_d4d3f502","updated":"2025-02-27 21:28:27.000000000","message":"Thanks for the code change.. no issues letting this merge, but i\u0027ve some questions.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"4ae15bf0f97f2ee87b0511589f070d6add147764","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"079c7cdd_62f53cd7","updated":"2025-02-27 15:48:48.000000000","message":"Thanks for working on this, I\u0027m happy that the limits can be dynamically retrieved by API from the NetApp backends.\n\nFrom a user perspective this now means that share creation fails if the respective host was selected by the scheduler. (and if other side effects stay the same, e.g. no shares get deleted etc, worst case: all scheduling attempts fail, even if there are other hosts available that could still host new shares)\n\nI would like to get this a step further and don\u0027t even schedule to that host in such scenario.\nMaybe this could be done by reporting a new pool capability so the CapabilitiesFilter can be used to remove such hosts from the possible scheduling targets? Wdyt?","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"7eaab64774dde7f440d659d9494372898165fd0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"815ba949_0205a27b","updated":"2025-02-27 15:18:05.000000000","message":"o/ @gouthampravi@gmail.com - could you please take a look at this change as well? :)","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e17ced2cff8b4f7c33d3944de098c7677ab15c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b368c5ea_8820f8fa","updated":"2025-02-28 23:53:20.000000000","message":"I\u0027ve no reason to hold this.. i\u0027ve responded to comments inline. will be okay if we merge this as is and follow up; however, i don\u0027t believe this is a feature so i don\u0027t mind it merging after the feature freeze","commit_id":"58c7115e5a67d4cd8cbcc64e1b53383f04158e1d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ac2f5779bec4611705b637c4051163ef2645ad96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c44ed453_2077003f","updated":"2025-03-01 17:32:42.000000000","message":"Thanks Goutham for your review comments, I incorporated most of them, one comment is still open, please provide your response on that.","commit_id":"58c7115e5a67d4cd8cbcc64e1b53383f04158e1d"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"83f89f813e71e4ee20dfebbfa50d8dd7807281c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"721cb9dd_2c1f022f","updated":"2025-03-02 09:35:49.000000000","message":"LGTM, thank you Gireesh","commit_id":"23d9e079bdc926d8ffa893f0c2d1fc344337e3f0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6ef4f05a73e7d9e1c00fde8cde938fc9a1169c3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f5184052_51cccc39","updated":"2025-03-04 08:54:28.000000000","message":"LGTM, thank you Gireesh","commit_id":"ab8fa6b2683b248e84fb5f00539573e98ae3640a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f81c24a041393452ee106a0834fcefa2b3a56a74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0a9e91cd_db5cdddb","updated":"2025-03-04 17:06:58.000000000","message":"Thanks @gawasthi2010@gmail.com","commit_id":"ab8fa6b2683b248e84fb5f00539573e98ae3640a"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":6537,"context_line":"            return vs_aggr_attributes.get_child_content(\u0027snaplock-type\u0027)"},{"line_number":6538,"context_line":""},{"line_number":6539,"context_line":"    @na_utils.trace"},{"line_number":6540,"context_line":"    def get_storage_failover_partner(self, node_name):"},{"line_number":6541,"context_line":"        \"\"\"Get the partner node of HA pair\"\"\""},{"line_number":6542,"context_line":"        api_args \u003d {\u0027node\u0027: node_name}"},{"line_number":6543,"context_line":"        result \u003d self.send_request(\u0027cf-get-partner\u0027, api_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"44d3344d_60e0985a","line":6540,"updated":"2025-02-25 18:12:43.000000000","message":"Add description for every method added newly.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[{"line_number":6537,"context_line":"            return vs_aggr_attributes.get_child_content(\u0027snaplock-type\u0027)"},{"line_number":6538,"context_line":""},{"line_number":6539,"context_line":"    @na_utils.trace"},{"line_number":6540,"context_line":"    def get_storage_failover_partner(self, node_name):"},{"line_number":6541,"context_line":"        \"\"\"Get the partner node of HA pair\"\"\""},{"line_number":6542,"context_line":"        api_args \u003d {\u0027node\u0027: node_name}"},{"line_number":6543,"context_line":"        result \u003d self.send_request(\u0027cf-get-partner\u0027, api_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"928e0f70_d28604fc","line":6540,"in_reply_to":"44d3344d_60e0985a","updated":"2025-02-26 11:56:04.000000000","message":"It is already there.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":6539,"context_line":"    @na_utils.trace"},{"line_number":6540,"context_line":"    def get_storage_failover_partner(self, node_name):"},{"line_number":6541,"context_line":"        \"\"\"Get the partner node of HA pair\"\"\""},{"line_number":6542,"context_line":"        api_args \u003d {\u0027node\u0027: node_name}"},{"line_number":6543,"context_line":"        result \u003d self.send_request(\u0027cf-get-partner\u0027, api_args)"},{"line_number":6544,"context_line":"        partner_node \u003d result.get_child_content(\"partner\")"},{"line_number":6545,"context_line":"        return partner_node"}],"source_content_type":"text/x-python","patch_set":3,"id":"1bcf8ec9_6b4c7a89","line":6542,"updated":"2025-02-25 18:12:43.000000000","message":"How will you deal the cases where the HA pair is already in failed over state, or you get a node which is in failed back state ? Can you explain the logic here in that case ? How will you tackle that ?","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[{"line_number":6539,"context_line":"    @na_utils.trace"},{"line_number":6540,"context_line":"    def get_storage_failover_partner(self, node_name):"},{"line_number":6541,"context_line":"        \"\"\"Get the partner node of HA pair\"\"\""},{"line_number":6542,"context_line":"        api_args \u003d {\u0027node\u0027: node_name}"},{"line_number":6543,"context_line":"        result \u003d self.send_request(\u0027cf-get-partner\u0027, api_args)"},{"line_number":6544,"context_line":"        partner_node \u003d result.get_child_content(\"partner\")"},{"line_number":6545,"context_line":"        return partner_node"}],"source_content_type":"text/x-python","patch_set":3,"id":"705019d3_2dd96061","line":6542,"in_reply_to":"1bcf8ec9_6b4c7a89","updated":"2025-02-26 11:56:04.000000000","message":"This method will just get the partner node detail whether it is normal state or in failover state.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":true,"context_lines":[{"line_number":6567,"context_line":"                in lif_info_list.get_children()]"},{"line_number":6568,"context_line":""},{"line_number":6569,"context_line":"    @na_utils.trace"},{"line_number":6570,"context_line":"    def get_data_lif_details_for_nodes(self):"},{"line_number":6571,"context_line":"        \"\"\"Get the data LIF details for each node.\"\"\""},{"line_number":6572,"context_line":"        api_args \u003d {"},{"line_number":6573,"context_line":"            \u0027desired-attributes\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"c6b9ce80_b78b54d4","line":6570,"range":{"start_line":6570,"start_character":0,"end_line":6570,"end_character":45},"updated":"2025-02-27 21:28:27.000000000","message":"there\u0027s no REST equivalent added for this method","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e17ced2cff8b4f7c33d3944de098c7677ab15c1","unresolved":true,"context_lines":[{"line_number":6567,"context_line":"                in lif_info_list.get_children()]"},{"line_number":6568,"context_line":""},{"line_number":6569,"context_line":"    @na_utils.trace"},{"line_number":6570,"context_line":"    def get_data_lif_details_for_nodes(self):"},{"line_number":6571,"context_line":"        \"\"\"Get the data LIF details for each node.\"\"\""},{"line_number":6572,"context_line":"        api_args \u003d {"},{"line_number":6573,"context_line":"            \u0027desired-attributes\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"674277c6_b117176e","line":6570,"range":{"start_line":6570,"start_character":0,"end_line":6570,"end_character":45},"in_reply_to":"38fd7c8f_70a58457","updated":"2025-02-28 23:53:20.000000000","message":"How does this work? If someone enables REST, does it fall back to the ZAPI method for this call?\n\nMaybe also file a Manila bug, or add a #TODO note within the driver so this can be addressed in the future","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ac2f5779bec4611705b637c4051163ef2645ad96","unresolved":false,"context_lines":[{"line_number":6567,"context_line":"                in lif_info_list.get_children()]"},{"line_number":6568,"context_line":""},{"line_number":6569,"context_line":"    @na_utils.trace"},{"line_number":6570,"context_line":"    def get_data_lif_details_for_nodes(self):"},{"line_number":6571,"context_line":"        \"\"\"Get the data LIF details for each node.\"\"\""},{"line_number":6572,"context_line":"        api_args \u003d {"},{"line_number":6573,"context_line":"            \u0027desired-attributes\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"90c0da7d_9e77ea6a","line":6570,"range":{"start_line":6570,"start_character":0,"end_line":6570,"end_character":45},"in_reply_to":"674277c6_b117176e","updated":"2025-03-01 17:32:42.000000000","message":"Thanks for this suggestion\nFiled the bug https://bugs.launchpad.net/manila/+bug/2100673 and added the TODO notes.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":false,"context_lines":[{"line_number":6567,"context_line":"                in lif_info_list.get_children()]"},{"line_number":6568,"context_line":""},{"line_number":6569,"context_line":"    @na_utils.trace"},{"line_number":6570,"context_line":"    def get_data_lif_details_for_nodes(self):"},{"line_number":6571,"context_line":"        \"\"\"Get the data LIF details for each node.\"\"\""},{"line_number":6572,"context_line":"        api_args \u003d {"},{"line_number":6573,"context_line":"            \u0027desired-attributes\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"38fd7c8f_70a58457","line":6570,"range":{"start_line":6570,"start_character":0,"end_line":6570,"end_character":45},"in_reply_to":"c6b9ce80_b78b54d4","updated":"2025-02-28 10:42:13.000000000","message":"There is no REST available for this. We don\u0027t have any plan to remove the ZAPI support so as of now this is fine. Also, will file RFE or bug on ONTAP to provide the REST for this.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":5635,"context_line":"                    migratable_lif.append(lif[\"name\"])"},{"line_number":5636,"context_line":"        return migratable_lif"},{"line_number":5637,"context_line":""},{"line_number":5638,"context_line":"    def _get_lif_records(self, query\u003dNone):"},{"line_number":5639,"context_line":"        if query:"},{"line_number":5640,"context_line":"            result \u003d self.send_request(\u0027/network/ip/interfaces\u0027, \u0027get\u0027,"},{"line_number":5641,"context_line":"                                       query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b6c81b5d_98ae1d51","line":5638,"updated":"2025-02-25 18:12:43.000000000","message":"Add trace for this method as well, as it involves ontap communication.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":5635,"context_line":"                    migratable_lif.append(lif[\"name\"])"},{"line_number":5636,"context_line":"        return migratable_lif"},{"line_number":5637,"context_line":""},{"line_number":5638,"context_line":"    def _get_lif_records(self, query\u003dNone):"},{"line_number":5639,"context_line":"        if query:"},{"line_number":5640,"context_line":"            result \u003d self.send_request(\u0027/network/ip/interfaces\u0027, \u0027get\u0027,"},{"line_number":5641,"context_line":"                                       query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":3,"id":"125d0a74_e7d6f8c4","line":5638,"in_reply_to":"36fbcb67_414223cb","updated":"2025-02-27 10:05:53.000000000","message":"I have some issue to write the unit test as we are using send_request two times and both the time it return the different value. I fix that now. I remove this code and merge it to above method.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":5635,"context_line":"                    migratable_lif.append(lif[\"name\"])"},{"line_number":5636,"context_line":"        return migratable_lif"},{"line_number":5637,"context_line":""},{"line_number":5638,"context_line":"    def _get_lif_records(self, query\u003dNone):"},{"line_number":5639,"context_line":"        if query:"},{"line_number":5640,"context_line":"            result \u003d self.send_request(\u0027/network/ip/interfaces\u0027, \u0027get\u0027,"},{"line_number":5641,"context_line":"                                       query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":3,"id":"36fbcb67_414223cb","line":5638,"in_reply_to":"7121dcc6_ab0b7fa9","updated":"2025-02-26 19:16:34.000000000","message":"I think this method can be dropped. This method is only called once, maybe it should be part of the caller function, unless you foresee this being called in multiple places in the future, but even in that case, that\u0027s not a problem. Query can be sent to send_request as an empty dictionary `{}` and it would have the same behavior, eliminating the need to have the if/else statement, so I think we can just make that decision in the caller.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":true,"context_lines":[{"line_number":5635,"context_line":"                    migratable_lif.append(lif[\"name\"])"},{"line_number":5636,"context_line":"        return migratable_lif"},{"line_number":5637,"context_line":""},{"line_number":5638,"context_line":"    def _get_lif_records(self, query\u003dNone):"},{"line_number":5639,"context_line":"        if query:"},{"line_number":5640,"context_line":"            result \u003d self.send_request(\u0027/network/ip/interfaces\u0027, \u0027get\u0027,"},{"line_number":5641,"context_line":"                                       query\u003dquery)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7121dcc6_ab0b7fa9","line":5638,"in_reply_to":"b6c81b5d_98ae1d51","updated":"2025-02-26 11:56:04.000000000","message":"trace mean, you wanted to put the logs. The purpose of this method is to write the unit test easily, otherwise I can merge this to previous method.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":226,"context_line":"                server_details[\u0027nfs_config\u0027] \u003d jsonutils.dumps(nfs_config)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            if (self.configuration.netapp_restrict_lif_creation_per_ha_pair"},{"line_number":229,"context_line":"                    and self._is_data_lif_count_limit_reached_for_ha_pair()):"},{"line_number":230,"context_line":"                raise exception.NetAppException(\"If a partner node fails, the\""},{"line_number":231,"context_line":"                                                \" number of Data LIFs might\""},{"line_number":232,"context_line":"                                                \" exceed the node\u0027s maximum \""}],"source_content_type":"text/x-python","patch_set":3,"id":"94b97ecd_07774be8","line":229,"updated":"2025-02-25 18:12:43.000000000","message":"How will you handle HA failover scenarios ?","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                server_details[\u0027nfs_config\u0027] \u003d jsonutils.dumps(nfs_config)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            if (self.configuration.netapp_restrict_lif_creation_per_ha_pair"},{"line_number":229,"context_line":"                    and self._is_data_lif_count_limit_reached_for_ha_pair()):"},{"line_number":230,"context_line":"                raise exception.NetAppException(\"If a partner node fails, the\""},{"line_number":231,"context_line":"                                                \" number of Data LIFs might\""},{"line_number":232,"context_line":"                                                \" exceed the node\u0027s maximum \""}],"source_content_type":"text/x-python","patch_set":3,"id":"2491ccd3_370297ed","line":229,"in_reply_to":"94b97ecd_07774be8","updated":"2025-02-26 11:56:04.000000000","message":"This feature is mainly to make sure this is no issue in case of failover. Here we are making sure that total data LIF for ha pair should not exceed more than node data LIF limit, therefore HA failover should not fail.\n\nOther scenarios is if Node is in failover state, in this case also it will work.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            if (self.configuration.netapp_restrict_lif_creation_per_ha_pair"},{"line_number":229,"context_line":"                    and self._is_data_lif_count_limit_reached_for_ha_pair()):"},{"line_number":230,"context_line":"                raise exception.NetAppException(\"If a partner node fails, the\""},{"line_number":231,"context_line":"                                                \" number of Data LIFs might\""},{"line_number":232,"context_line":"                                                \" exceed the node\u0027s maximum \""},{"line_number":233,"context_line":"                                                \"data LIF limit\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"832381e8_3b5965a0","line":230,"updated":"2025-02-25 18:12:43.000000000","message":"Its good to print the numbers here. When the user hits the problem, he\u0027ll not be able to understand where the problem resides. If you print node, lif limit, expected_lif_count post failover, - it would be great for user to debug.\n\nWould it be possible to select another pool/vm combination when it fails ? Or is this part of your improvement plan for next release ?","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            if (self.configuration.netapp_restrict_lif_creation_per_ha_pair"},{"line_number":229,"context_line":"                    and self._is_data_lif_count_limit_reached_for_ha_pair()):"},{"line_number":230,"context_line":"                raise exception.NetAppException(\"If a partner node fails, the\""},{"line_number":231,"context_line":"                                                \" number of Data LIFs might\""},{"line_number":232,"context_line":"                                                \" exceed the node\u0027s maximum \""},{"line_number":233,"context_line":"                                                \"data LIF limit\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"29a3f90a_43b4fccf","line":230,"in_reply_to":"832381e8_3b5965a0","updated":"2025-02-26 11:56:04.000000000","message":"good point, make sense to add the lif count. I have change the code for that. \n\nIn Manila, if we have 8 nodes cluster means, 4 ha pairs. When we create the share server that time it will create the LIF on each nodes, therefore in case of 8 nodes of cluster we will be creating 8 LIFs. Here logic is written if any one of the HA pair reached the data LIF limit, we prevent it to create the share server/data LIF.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"    def _is_data_lif_count_limit_reached_for_ha_pair(self):"},{"line_number":2440,"context_line":"        ha_pair \u003d {node: self._client.get_storage_failover_partner(node)"},{"line_number":2441,"context_line":"                   for node in self._client.list_cluster_nodes()}"},{"line_number":2442,"context_line":"        lif_info_for_node \u003d self._client.get_data_lif_details_for_nodes()"},{"line_number":2443,"context_line":"        lif_info_dict \u003d {info[\u0027node\u0027]: info for info in lif_info_for_node}"},{"line_number":2444,"context_line":""},{"line_number":2445,"context_line":"        for node, ha_partner in ha_pair.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8833c_fbfbf3b5","line":2442,"updated":"2025-02-25 18:12:43.000000000","message":"get_data_lif_details_for_nodes - this method is missing for rest api. I am not sure how the client of rest api would be able to invoke this method ?","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"    def _is_data_lif_count_limit_reached_for_ha_pair(self):"},{"line_number":2440,"context_line":"        ha_pair \u003d {node: self._client.get_storage_failover_partner(node)"},{"line_number":2441,"context_line":"                   for node in self._client.list_cluster_nodes()}"},{"line_number":2442,"context_line":"        lif_info_for_node \u003d self._client.get_data_lif_details_for_nodes()"},{"line_number":2443,"context_line":"        lif_info_dict \u003d {info[\u0027node\u0027]: info for info in lif_info_for_node}"},{"line_number":2444,"context_line":""},{"line_number":2445,"context_line":"        for node, ha_partner in ha_pair.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"61e516b1_abca667b","line":2442,"in_reply_to":"3ae8833c_fbfbf3b5","updated":"2025-02-26 11:56:04.000000000","message":"we don\u0027t have Rest API available for so I can\u0027t add this for rest. As there is no plan to remove the ZAPI support so for Rest it will fail to ZAPI. I think we already discussed this.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"    def _is_data_lif_count_limit_reached_for_ha_pair(self):"},{"line_number":2440,"context_line":"        ha_pair \u003d {node: self._client.get_storage_failover_partner(node)"},{"line_number":2441,"context_line":"                   for node in self._client.list_cluster_nodes()}"},{"line_number":2442,"context_line":"        lif_info_for_node \u003d self._client.get_data_lif_details_for_nodes()"},{"line_number":2443,"context_line":"        lif_info_dict \u003d {info[\u0027node\u0027]: info for info in lif_info_for_node}"},{"line_number":2444,"context_line":""},{"line_number":2445,"context_line":"        for node, ha_partner in ha_pair.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab1cbe68_63f248dc","line":2442,"in_reply_to":"61e516b1_abca667b","updated":"2025-02-26 19:16:34.000000000","message":"Yes, we can fail over, but as it is, won\u0027t this raise an exception in case people are using rest? I can be forgetting something, but I mean, the client is being called in a specific method, if it doesn\u0027t exist in that class, it would raise an exception.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":2439,"context_line":"    def _is_data_lif_count_limit_reached_for_ha_pair(self):"},{"line_number":2440,"context_line":"        ha_pair \u003d {node: self._client.get_storage_failover_partner(node)"},{"line_number":2441,"context_line":"                   for node in self._client.list_cluster_nodes()}"},{"line_number":2442,"context_line":"        lif_info_for_node \u003d self._client.get_data_lif_details_for_nodes()"},{"line_number":2443,"context_line":"        lif_info_dict \u003d {info[\u0027node\u0027]: info for info in lif_info_for_node}"},{"line_number":2444,"context_line":""},{"line_number":2445,"context_line":"        for node, ha_partner in ha_pair.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"c6cd7dc2_73877c97","line":2442,"in_reply_to":"ab1cbe68_63f248dc","updated":"2025-02-27 10:05:53.000000000","message":"Just wanted to correct my sentence in my previous comment, I mean to say if Rest method will not available it will fall back to ZAPI.\n\nthere is a typo, fail, it should be fall.\n\nyes, it will not raise the exception, if method is not available for Rest, it will use ZAPI method.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":2448,"context_line":"                    \u0027count-for-node\u0027, 0)"},{"line_number":2449,"context_line":"                )"},{"line_number":2450,"context_line":"                lif_limit_for_node \u003d int(lif_info_dict[node].get("},{"line_number":2451,"context_line":"                    \u0027limit-for-node\u0027, 0)"},{"line_number":2452,"context_line":"                )"},{"line_number":2453,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2454,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"}],"source_content_type":"text/x-python","patch_set":3,"id":"896cd88c_d12788c0","line":2451,"updated":"2025-02-25 18:12:43.000000000","message":"Dont assume limit-for-node as 0. Keep 1024 as the default value.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":false,"context_lines":[{"line_number":2448,"context_line":"                    \u0027count-for-node\u0027, 0)"},{"line_number":2449,"context_line":"                )"},{"line_number":2450,"context_line":"                lif_limit_for_node \u003d int(lif_info_dict[node].get("},{"line_number":2451,"context_line":"                    \u0027limit-for-node\u0027, 0)"},{"line_number":2452,"context_line":"                )"},{"line_number":2453,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2454,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f2feac1_7065316d","line":2451,"in_reply_to":"896cd88c_d12788c0","updated":"2025-02-26 11:56:04.000000000","message":"done, I put it 512, that is the node limit","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":2444,"context_line":"                    \u0027count-for-node\u0027, 0)"},{"line_number":2445,"context_line":"                )"},{"line_number":2446,"context_line":"                lif_limit_for_node \u003d int(lif_info_dict[node].get("},{"line_number":2447,"context_line":"                    \u0027limit-for-node\u0027, 512)"},{"line_number":2448,"context_line":"                )"},{"line_number":2449,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"}],"source_content_type":"text/x-python","patch_set":4,"id":"4ea9319c_685bea35","line":2447,"range":{"start_line":2447,"start_character":38,"end_line":2447,"end_character":41},"updated":"2025-02-26 19:16:34.000000000","message":"is this an ONTAP pre-definition? If so, please add a comment stating it, otherwise, we need a reason or a way to configure this number","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":2444,"context_line":"                    \u0027count-for-node\u0027, 0)"},{"line_number":2445,"context_line":"                )"},{"line_number":2446,"context_line":"                lif_limit_for_node \u003d int(lif_info_dict[node].get("},{"line_number":2447,"context_line":"                    \u0027limit-for-node\u0027, 512)"},{"line_number":2448,"context_line":"                )"},{"line_number":2449,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"}],"source_content_type":"text/x-python","patch_set":4,"id":"1692d9fa_39ca051d","line":2447,"range":{"start_line":2447,"start_character":38,"end_line":2447,"end_character":41},"in_reply_to":"4ea9319c_685bea35","updated":"2025-02-27 10:05:53.000000000","message":"This value can vary from different series of ONTAP. I am getting this info from ONTAP using ZAPI but in case there is some issue when key doesn\u0027t exist I am setting this value to 512, which might be common for mid range of storage but not applicable for all series of ONTAP boxes. \n\nI don\u0027t wanted to add one more parameter to get only this value, I am removing this. There is very less chance or even zero chance that dictionary will not have this key.","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":2448,"context_line":"                )"},{"line_number":2449,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"}],"source_content_type":"text/x-python","patch_set":4,"id":"184df78f_2f1c65e8","line":2452,"range":{"start_line":2451,"start_character":16,"end_line":2452,"end_character":62},"updated":"2025-02-26 19:16:34.000000000","message":"nit:\n\n```suggestion\n                expected_lif_count_after_failover \u003d (\n                    data_lif_count + len(migratable_data_lifs))\n```","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":2448,"context_line":"                )"},{"line_number":2449,"context_line":"                migratable_data_lifs \u003d ("},{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f98d970_701e5896","line":2452,"range":{"start_line":2451,"start_character":16,"end_line":2452,"end_character":62},"in_reply_to":"184df78f_2f1c65e8","updated":"2025-02-27 10:05:53.000000000","message":"Done","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"},{"line_number":2456,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae050d3_88392bb9","line":2453,"range":{"start_line":2453,"start_character":16,"end_line":2453,"end_character":74},"updated":"2025-02-26 19:16:34.000000000","message":"missing coverage for the statements inside this if statement. Could you please add some unit tests? https://433f95aa36fa4cf3b7fd-c29ae328b0bbc532bf05a0fdd76e11b7.ssl.cf1.rackcdn.com/942216/4/check/openstack-tox-cover/e974362/cover/z_a8cfac5052a75b06_lib_multi_svm_py.html","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"},{"line_number":2456,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9c2f3386_974be90e","line":2453,"range":{"start_line":2453,"start_character":19,"end_line":2453,"end_character":73},"updated":"2025-02-26 19:16:34.000000000","message":"nit: please invert this, I believe it\u0027d look more readable\n```suggestion\n                if expected_lif_count_after_failover \u003e lif_limit_for_node:\n```","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"},{"line_number":2456,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"}],"source_content_type":"text/x-python","patch_set":4,"id":"2afa54d1_f1cfa2a0","line":2453,"range":{"start_line":2453,"start_character":16,"end_line":2453,"end_character":74},"in_reply_to":"1ae050d3_88392bb9","updated":"2025-02-27 10:05:53.000000000","message":"nice, thanks for pointing this. unit test is there but forgot to call the method. Fixed that.","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":2450,"context_line":"                    self._client.get_migratable_data_lif_for_node(ha_partner))"},{"line_number":2451,"context_line":"                expected_lif_count_after_failover \u003d\\"},{"line_number":2452,"context_line":"                    data_lif_count + len(migratable_data_lifs)"},{"line_number":2453,"context_line":"                if lif_limit_for_node \u003c expected_lif_count_after_failover:"},{"line_number":2454,"context_line":"                    msg_args \u003d {"},{"line_number":2455,"context_line":"                        \u0027data_lif\u0027: expected_lif_count_after_failover,"},{"line_number":2456,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"}],"source_content_type":"text/x-python","patch_set":4,"id":"680e8c6c_9807cf7b","line":2453,"range":{"start_line":2453,"start_character":19,"end_line":2453,"end_character":73},"in_reply_to":"9c2f3386_974be90e","updated":"2025-02-27 10:05:53.000000000","message":"Done","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"                    \u0027neutron_subnet_id\u0027)"},{"line_number":1229,"context_line":"        }"},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1232,"context_line":"        node_name \u003d self._client.list_cluster_nodes()[0]"},{"line_number":1233,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1234,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1235,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("},{"line_number":1236,"context_line":"            node_name, port, vlan) or self._create_ipspace("},{"line_number":1237,"context_line":"            network_info, client\u003ddest_client)"},{"line_number":1238,"context_line":"        self._create_port_and_broadcast_domain("},{"line_number":1239,"context_line":"            destination_ipspace, network_info)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        def _cleanup_ipspace(ipspace):"},{"line_number":1242,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"c0d55157_6254b236","line":1239,"range":{"start_line":1231,"start_character":8,"end_line":1239,"end_character":46},"updated":"2025-02-27 21:28:27.000000000","message":"Is the compatibility test required in this context too?","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ac2f5779bec4611705b637c4051163ef2645ad96","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"                    \u0027neutron_subnet_id\u0027)"},{"line_number":1229,"context_line":"        }"},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1232,"context_line":"        node_name \u003d self._client.list_cluster_nodes()[0]"},{"line_number":1233,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1234,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1235,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("},{"line_number":1236,"context_line":"            node_name, port, vlan) or self._create_ipspace("},{"line_number":1237,"context_line":"            network_info, client\u003ddest_client)"},{"line_number":1238,"context_line":"        self._create_port_and_broadcast_domain("},{"line_number":1239,"context_line":"            destination_ipspace, network_info)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        def _cleanup_ipspace(ipspace):"},{"line_number":1242,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"f7d9adb9_2dc479ec","line":1239,"range":{"start_line":1231,"start_character":8,"end_line":1239,"end_character":46},"in_reply_to":"17da7239_88de7b70","updated":"2025-03-01 17:32:42.000000000","message":"Got it, we do share server migration across the cluster\nAdded the logic for same.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"                    \u0027neutron_subnet_id\u0027)"},{"line_number":1229,"context_line":"        }"},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1232,"context_line":"        node_name \u003d self._client.list_cluster_nodes()[0]"},{"line_number":1233,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1234,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1235,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("},{"line_number":1236,"context_line":"            node_name, port, vlan) or self._create_ipspace("},{"line_number":1237,"context_line":"            network_info, client\u003ddest_client)"},{"line_number":1238,"context_line":"        self._create_port_and_broadcast_domain("},{"line_number":1239,"context_line":"            destination_ipspace, network_info)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        def _cleanup_ipspace(ipspace):"},{"line_number":1242,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"f1682817_b3904e59","line":1239,"range":{"start_line":1231,"start_character":8,"end_line":1239,"end_character":46},"in_reply_to":"c0d55157_6254b236","updated":"2025-02-28 10:42:13.000000000","message":"No, I don\u0027t think it is require. So, here I am not doing any operation I restricting user for new share server creation if LIF limit reached for node.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e17ced2cff8b4f7c33d3944de098c7677ab15c1","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"                    \u0027neutron_subnet_id\u0027)"},{"line_number":1229,"context_line":"        }"},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1232,"context_line":"        node_name \u003d self._client.list_cluster_nodes()[0]"},{"line_number":1233,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1234,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1235,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("},{"line_number":1236,"context_line":"            node_name, port, vlan) or self._create_ipspace("},{"line_number":1237,"context_line":"            network_info, client\u003ddest_client)"},{"line_number":1238,"context_line":"        self._create_port_and_broadcast_domain("},{"line_number":1239,"context_line":"            destination_ipspace, network_info)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        def _cleanup_ipspace(ipspace):"},{"line_number":1242,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"17da7239_88de7b70","line":1239,"range":{"start_line":1231,"start_character":8,"end_line":1239,"end_character":46},"in_reply_to":"f1682817_b3904e59","updated":"2025-02-28 23:53:20.000000000","message":"Yes, i\u0027m picturing an admin requesting to migrate a share server from one host to another, \n\nand in the new host, the server is created with a home node.. we aren\u0027t checking if the partner node has enough data LIFs. If it doesn\u0027t have enough data LIFs, imho, you should disallow the migration..","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":true,"context_lines":[{"line_number":2458,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"},{"line_number":2459,"context_line":"                    }"},{"line_number":2460,"context_line":"                    msg \u003d _(\"If a partner node fails, the number of data LIFs\""},{"line_number":2461,"context_line":"                            \" %(data_lif)s will exceed the node\u0027s maximum \""},{"line_number":2462,"context_line":"                            \"data LIF limit %(lif_limit)s\") % msg_args"},{"line_number":2463,"context_line":"                    LOG.error(msg)"},{"line_number":2464,"context_line":"                    raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"17254e5a_1690e801","line":2461,"range":{"start_line":2461,"start_character":30,"end_line":2461,"end_character":42},"updated":"2025-02-27 21:28:27.000000000","message":"nit: enclose in braces for better readability","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":false,"context_lines":[{"line_number":2458,"context_line":"                        \u0027lif_limit\u0027: lif_limit_for_node,"},{"line_number":2459,"context_line":"                    }"},{"line_number":2460,"context_line":"                    msg \u003d _(\"If a partner node fails, the number of data LIFs\""},{"line_number":2461,"context_line":"                            \" %(data_lif)s will exceed the node\u0027s maximum \""},{"line_number":2462,"context_line":"                            \"data LIF limit %(lif_limit)s\") % msg_args"},{"line_number":2463,"context_line":"                    LOG.error(msg)"},{"line_number":2464,"context_line":"                    raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"4c16824c_6e7c6655","line":2461,"range":{"start_line":2461,"start_character":30,"end_line":2461,"end_character":42},"in_reply_to":"17254e5a_1690e801","updated":"2025-02-28 10:42:13.000000000","message":"Done","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":true,"context_lines":[{"line_number":2459,"context_line":"                    }"},{"line_number":2460,"context_line":"                    msg \u003d _(\"If a partner node fails, the number of data LIFs\""},{"line_number":2461,"context_line":"                            \" %(data_lif)s will exceed the node\u0027s maximum \""},{"line_number":2462,"context_line":"                            \"data LIF limit %(lif_limit)s\") % msg_args"},{"line_number":2463,"context_line":"                    LOG.error(msg)"},{"line_number":2464,"context_line":"                    raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"870df6bb_e690c3a8","line":2462,"range":{"start_line":2462,"start_character":44,"end_line":2462,"end_character":57},"updated":"2025-02-27 21:28:27.000000000","message":"same","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":false,"context_lines":[{"line_number":2459,"context_line":"                    }"},{"line_number":2460,"context_line":"                    msg \u003d _(\"If a partner node fails, the number of data LIFs\""},{"line_number":2461,"context_line":"                            \" %(data_lif)s will exceed the node\u0027s maximum \""},{"line_number":2462,"context_line":"                            \"data LIF limit %(lif_limit)s\") % msg_args"},{"line_number":2463,"context_line":"                    LOG.error(msg)"},{"line_number":2464,"context_line":"                    raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"42baf273_5d907473","line":2462,"range":{"start_line":2462,"start_character":44,"end_line":2462,"end_character":57},"in_reply_to":"870df6bb_e690c3a8","updated":"2025-02-28 10:42:13.000000000","message":"Done","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ac1624286b91286053ac96d37c04d366aaf21a2b","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"38f0b198_6b686144","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"updated":"2025-02-27 21:28:27.000000000","message":"i wonder if we should default to True since this is a new release. Making this the default behavior will mean operators have one less option to worry about. \n\n\nI understand we don\u0027t want to break existing behavior if this fix is ever backported. I\u0027ve no idea why you/NetApp doesn\u0027t want to target this as a bugfix. I think this is a bug fix, and not a \"feature\".","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"98c183edea18aa8f3508c5ba0f8881c42624c1be","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"86f5f706_efb0ebaa","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"2327e4bf_c44f7ab5","updated":"2025-03-02 18:44:43.000000000","message":"Goutham - we understand your point on the design aspect and  also from best practices perspective. It is like that for years, and we have done testing for that in-house. We also discussed with ONTAP team,  and we\u0027ll leave it as False right now, and let the current behavior continue. If SAP is happy with this fix after validating it in their staging/production environment, we\u0027ll open a new bug and set this to True by default, and back port after that. \n\nThank you for your thorough review.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"12bbdbcb67ff4912539775854cf6b8541385874d","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"c9fab3dc_ee6a263a","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"38f0b198_6b686144","updated":"2025-02-28 10:42:13.000000000","message":"Yes, we don\u0027t want to break the existing behaviour. We must ensure that customers who set this option to True understand its impact. I also consult with Saravana, he also recommending to set the default value to False.\n\nThis requirement was originally submitted by SAP as a feature request. Although SAP can backport it to older releases in their environment. We have implemented it as a feature, however, if you wanted me to change this to as bug, I am ok with this. Please let me know if you wanted to change this to bug, in that case I have to raise a bug and update the release note accordingly.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ac2f5779bec4611705b637c4051163ef2645ad96","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"2327e4bf_c44f7ab5","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"4d298090_a97dcfa4","updated":"2025-03-01 17:32:42.000000000","message":"I think default setting false is fine to maintain the existing behaviour and let the customer change this according to their requirement. Additionally, let SAP test this logic to their production environment then we can file the bug to set the default value to True.\n\nAren\u0027t we backporting the feature, only bug we can backport ? if this is the case I can consider it as bug fix so that we can backport this to older release.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e630d528116df5d1fea6e561f427480f9b76e66d","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"93110074_4bcc3a8a","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"86f5f706_efb0ebaa","updated":"2025-03-03 21:45:56.000000000","message":"Great, thank you.. Based on our discussion at the Manila midcycle meeting today, would you want to file a bug for this and reference it in the commit message, Gireesh?","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7371a043dabd53c5dde47699ef22ad05441e7147","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"16741c7d_efe1e923","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"93110074_4bcc3a8a","updated":"2025-03-04 07:46:43.000000000","message":"Done","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e17ced2cff8b4f7c33d3944de098c7677ab15c1","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                    \u0027option only applies when the option \u0027"},{"line_number":205,"context_line":"                    \u0027driver_handles_share_servers is set to True.\u0027),"},{"line_number":206,"context_line":"    cfg.BoolOpt(\u0027netapp_restrict_lif_creation_per_ha_pair\u0027,"},{"line_number":207,"context_line":"                default\u003dFalse,"},{"line_number":208,"context_line":"                help\u003d\u0027Prevent the creation of a share server if total number\u0027"},{"line_number":209,"context_line":"                     \u0027 of data LIFs on one node of HA pair, including those\u0027"},{"line_number":210,"context_line":"                     \u0027 that can be migrated in case of failure, exceeds the \u0027"},{"line_number":211,"context_line":"                     \u0027maximum data LIFs supported by the node. This option \u0027"},{"line_number":212,"context_line":"                     \u0027guarantees that, in the event of a node failure, the\u0027"},{"line_number":213,"context_line":"                     \u0027 partner node will be able to takeover all data LIFs.\u0027)"},{"line_number":214,"context_line":"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"netapp_cluster_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"4d298090_a97dcfa4","line":213,"range":{"start_line":207,"start_character":16,"end_line":213,"end_character":77},"in_reply_to":"c9fab3dc_ee6a263a","updated":"2025-02-28 23:53:20.000000000","message":"Hmm, What do you think? My thought is that this is a serious design flaw in the driver that could affect anyone.. and not being able to migrate to a HA partner during a node failure would mean loss of connectivity for anyone.. that\u0027s why I think your code is a bug fix.","commit_id":"8ba3bcc23f641056f2fedcb3b60cce69e2006420"}],"manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f989ba0c57f0cfc2b3ce5be1ec4774876cb1b2cd","unresolved":true,"context_lines":[{"line_number":9659,"context_line":"        )"},{"line_number":9660,"context_line":"        self.assertIs(False, result)"},{"line_number":9661,"context_line":""},{"line_number":9662,"context_line":"    def test_get_storage_failover_partner(self):"},{"line_number":9663,"context_line":"        api_response \u003d netapp_api.NaElement(fake.STORAGE_FAIL_OVER_PARTNER)"},{"line_number":9664,"context_line":"        self.mock_object(self.client,"},{"line_number":9665,"context_line":"                         \u0027send_request\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"81f6f520_2c13cbe2","line":9662,"updated":"2025-02-25 18:12:43.000000000","message":"Same as above, add some test description to understand what it is doing.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73802c513eb3459fb737a780d49a4b958465dda9","unresolved":true,"context_lines":[{"line_number":9659,"context_line":"        )"},{"line_number":9660,"context_line":"        self.assertIs(False, result)"},{"line_number":9661,"context_line":""},{"line_number":9662,"context_line":"    def test_get_storage_failover_partner(self):"},{"line_number":9663,"context_line":"        api_response \u003d netapp_api.NaElement(fake.STORAGE_FAIL_OVER_PARTNER)"},{"line_number":9664,"context_line":"        self.mock_object(self.client,"},{"line_number":9665,"context_line":"                         \u0027send_request\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"92f30704_44cb4dc8","line":9662,"in_reply_to":"81f6f520_2c13cbe2","updated":"2025-02-26 11:56:04.000000000","message":"Are you sure we have to add the description for unit test ..? I am not seeing any description for unit test.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":9659,"context_line":"        )"},{"line_number":9660,"context_line":"        self.assertIs(False, result)"},{"line_number":9661,"context_line":""},{"line_number":9662,"context_line":"    def test_get_storage_failover_partner(self):"},{"line_number":9663,"context_line":"        api_response \u003d netapp_api.NaElement(fake.STORAGE_FAIL_OVER_PARTNER)"},{"line_number":9664,"context_line":"        self.mock_object(self.client,"},{"line_number":9665,"context_line":"                         \u0027send_request\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"97dd56c5_5e2d88b0","line":9662,"in_reply_to":"92f30704_44cb4dc8","updated":"2025-02-27 10:05:53.000000000","message":"Please re-open if require.","commit_id":"1a7832f5860e99a5b8ba257d0d77f1e73e5b2926"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":9707,"context_line":"                },"},{"line_number":9708,"context_line":"            },"},{"line_number":9709,"context_line":"        }"},{"line_number":9710,"context_line":"        expected_result \u003d ["},{"line_number":9711,"context_line":"            {\u0027limit-for-node\u0027: \u0027512\u0027,"},{"line_number":9712,"context_line":"             \u0027count-for-node\u0027: \u002744\u0027,"},{"line_number":9713,"context_line":"             \u0027node\u0027: \u0027fake_node\u0027}"},{"line_number":9714,"context_line":"        ]"},{"line_number":9715,"context_line":"        result \u003d self.client.get_data_lif_details_for_nodes()"},{"line_number":9716,"context_line":"        self.client.send_iter_request.assert_has_calls(["},{"line_number":9717,"context_line":"            mock.call(\u0027data-lif-capacity-details\u0027, api_args)])"}],"source_content_type":"text/x-python","patch_set":4,"id":"634a1788_75359f5d","line":9714,"range":{"start_line":9710,"start_character":8,"end_line":9714,"end_character":9},"updated":"2025-02-26 19:16:34.000000000","message":"nit:\n```suggestion\n        expected_result \u003d [{\n            \u0027limit-for-node\u0027: \u0027512\u0027,\n             \u0027count-for-node\u0027: \u002744\u0027,\n             \u0027node\u0027: \u0027fake_node\u0027\n        }]\n```","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":9707,"context_line":"                },"},{"line_number":9708,"context_line":"            },"},{"line_number":9709,"context_line":"        }"},{"line_number":9710,"context_line":"        expected_result \u003d ["},{"line_number":9711,"context_line":"            {\u0027limit-for-node\u0027: \u0027512\u0027,"},{"line_number":9712,"context_line":"             \u0027count-for-node\u0027: \u002744\u0027,"},{"line_number":9713,"context_line":"             \u0027node\u0027: \u0027fake_node\u0027}"},{"line_number":9714,"context_line":"        ]"},{"line_number":9715,"context_line":"        result \u003d self.client.get_data_lif_details_for_nodes()"},{"line_number":9716,"context_line":"        self.client.send_iter_request.assert_has_calls(["},{"line_number":9717,"context_line":"            mock.call(\u0027data-lif-capacity-details\u0027, api_args)])"}],"source_content_type":"text/x-python","patch_set":4,"id":"4bcb374a_8f2e1042","line":9714,"range":{"start_line":9710,"start_character":8,"end_line":9714,"end_character":9},"in_reply_to":"634a1788_75359f5d","updated":"2025-02-27 10:05:53.000000000","message":"Thanks for this suggestion, done.","commit_id":"da550b73f260708f98cc5b49490add242a41a977"}],"manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_multi_svm.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":513,"context_line":"            self.library,"},{"line_number":514,"context_line":"            \u0027_check_nfs_config_extra_specs_validity\u0027,"},{"line_number":515,"context_line":"            mock.Mock())"},{"line_number":516,"context_line":"        self.library.configuration.netapp_restrict_lif_creation_per_ha_pair \\"},{"line_number":517,"context_line":"            \u003d True"},{"line_number":518,"context_line":"        check_lif_limit \u003d self.mock_object("},{"line_number":519,"context_line":"            self.library,"},{"line_number":520,"context_line":"            \u0027_check_data_lif_count_limit_reached_for_ha_pair\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a825dacb_a18733f8","line":517,"range":{"start_line":516,"start_character":8,"end_line":517,"end_character":18},"updated":"2025-02-26 19:16:34.000000000","message":"please wrap it in braces","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            self.library,"},{"line_number":514,"context_line":"            \u0027_check_nfs_config_extra_specs_validity\u0027,"},{"line_number":515,"context_line":"            mock.Mock())"},{"line_number":516,"context_line":"        self.library.configuration.netapp_restrict_lif_creation_per_ha_pair \\"},{"line_number":517,"context_line":"            \u003d True"},{"line_number":518,"context_line":"        check_lif_limit \u003d self.mock_object("},{"line_number":519,"context_line":"            self.library,"},{"line_number":520,"context_line":"            \u0027_check_data_lif_count_limit_reached_for_ha_pair\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c9162ac5_5ce1790c","line":517,"range":{"start_line":516,"start_character":8,"end_line":517,"end_character":18},"in_reply_to":"a825dacb_a18733f8","updated":"2025-02-27 10:05:53.000000000","message":"Done","commit_id":"da550b73f260708f98cc5b49490add242a41a977"}],"releasenotes/notes/netapp-restrict-lif-creation-per-ha-pair-249021556be5189d.yaml":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp Driver: The NetApp driver now support to prevent the creation"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"36e6105e_a89216c6","line":1,"updated":"2025-02-26 19:16:34.000000000","message":"great release note, Gireesh! :D","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp Driver: The NetApp driver now support to prevent the creation"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"618fb816_9659ba62","line":1,"in_reply_to":"36e6105e_a89216c6","updated":"2025-02-27 10:05:53.000000000","message":"Thanks Carlos","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f6cc99f0e832be21ad71f8fb758a22ad0b7b80d8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp Driver: The NetApp driver now support to prevent the creation"},{"line_number":5,"context_line":"      of a share server if the total number of data LIFs on one node of"},{"line_number":6,"context_line":"      HA pair, including those that can be migrated in case of failure,"},{"line_number":7,"context_line":"      exceeds the maximum number data LIFs supported by the node. This"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"0e3c5d88_5ef6ce20","line":4,"range":{"start_line":4,"start_character":41,"end_line":4,"end_character":59},"updated":"2025-02-26 19:16:34.000000000","message":"prevents","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b029e7a60ce44fd48364528001c2809b8cf83d2a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp Driver: The NetApp driver now support to prevent the creation"},{"line_number":5,"context_line":"      of a share server if the total number of data LIFs on one node of"},{"line_number":6,"context_line":"      HA pair, including those that can be migrated in case of failure,"},{"line_number":7,"context_line":"      exceeds the maximum number data LIFs supported by the node. This"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"6226b443_2f86cf66","line":4,"range":{"start_line":4,"start_character":41,"end_line":4,"end_character":59},"in_reply_to":"0e3c5d88_5ef6ce20","updated":"2025-02-27 10:05:53.000000000","message":"Done","commit_id":"da550b73f260708f98cc5b49490add242a41a977"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f81c24a041393452ee106a0834fcefa2b3a56a74","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp driver `bug #2100835"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/manila/+bug/2100835\u003e`_:"},{"line_number":6,"context_line":"    The NetApp driver now supports to prevent the creation of a share"},{"line_number":7,"context_line":"    server if the total number of data LIFs on one node of HA pair,"},{"line_number":8,"context_line":"    including those that can be migrated in case of failure,exceeds the"},{"line_number":9,"context_line":"    maximum number data LIFs supported by the node. This option guarantees"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5add22c6_30e8f162","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":45},"updated":"2025-03-04 17:06:58.000000000","message":"can now prevent","commit_id":"ab8fa6b2683b248e84fb5f00539573e98ae3640a"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"e433d627675b7c79e884f5194ff4636e02b3ee52","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NetApp driver `bug #2100835"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/manila/+bug/2100835\u003e`_:"},{"line_number":6,"context_line":"    The NetApp driver now supports to prevent the creation of a share"},{"line_number":7,"context_line":"    server if the total number of data LIFs on one node of HA pair,"},{"line_number":8,"context_line":"    including those that can be migrated in case of failure,exceeds the"},{"line_number":9,"context_line":"    maximum number data LIFs supported by the node. This option guarantees"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ae9d6f35_05f523d4","line":6,"range":{"start_line":6,"start_character":22,"end_line":6,"end_character":45},"in_reply_to":"5add22c6_30e8f162","updated":"2025-03-11 04:13:27.000000000","message":"Done as part of below patch \nhttps://review.opendev.org/c/openstack/manila/+/943527","commit_id":"ab8fa6b2683b248e84fb5f00539573e98ae3640a"}]}
