)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"020aa3c3f94c7895fcb71cbe5fa11478691ef72c","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     medhac1403 \u003cmedhaj06@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-02 09:23:37 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added health check for nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ifd479eb5ede90f914fdbd62618938d200abb193a"},{"line_number":10,"context_line":"Signed-off-by: medhac1403 \u003cmedhaj06@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"45d65687_9c2955a4","line":7,"updated":"2026-03-03 05:33:23.000000000","message":"Please add more details for the commit message. Since we are doing more than checking the node health check.","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"4727d54bcc2d717f85bee5a57dfa9227ab87867f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     medhac1403 \u003cmedhaj06@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-02 09:23:37 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added health check for nodes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ifd479eb5ede90f914fdbd62618938d200abb193a"},{"line_number":10,"context_line":"Signed-off-by: medhac1403 \u003cmedhaj06@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1c8833b1_5bf4b13b","line":7,"in_reply_to":"45d65687_9c2955a4","updated":"2026-03-03 11:34:37.000000000","message":"Done","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"020aa3c3f94c7895fcb71cbe5fa11478691ef72c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a341c731_945b2500","updated":"2026-03-03 05:33:23.000000000","message":"Please look at the comments.","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"57960cca66c260caaac737965e5ec949927f0f17","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a3dcabba_57444153","updated":"2026-03-03 04:56:03.000000000","message":"please address the comments.","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"7209318a56850a864acec1e849e6060e5e9f9c26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8971da3f_9f763657","updated":"2026-03-05 14:35:44.000000000","message":"LGTM","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"ff2d0ed11864287a99b21a6d7e21c2819ab95361","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a2f60f7d_10fddbf6","updated":"2026-03-04 11:02:39.000000000","message":"LGTM","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"fbc6ced4dd0297fb349295fd2d5a29cfa9059b2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f5f65e9c_30248fe8","updated":"2026-03-10 13:20:29.000000000","message":"LGTM ..!","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"720eb0bd05addda833b9390b06e29543511406a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"33645f81_9f7d4d87","updated":"2026-03-18 11:54:17.000000000","message":"Run Netapp-CI","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6b0ca91537798f4b914bfa7e0d9a8ec429dabc0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3ccf77de_d563842a","updated":"2026-03-11 15:49:33.000000000","message":"Thanks for working on this change. Please take a look at the comment inline","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c7a04b6b24f807e1979ff708e6bd21893c2bf43","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f4e2e9eb_4e29841b","updated":"2026-03-03 11:56:26.000000000","message":"Thanks for working on this, provided few comments, please take a look.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"73d2f5dc9679444dce96ec7f11faeebc08f0cc0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"26bb97ee_c62408e6","updated":"2026-03-05 08:17:07.000000000","message":"recheck","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"66976dcce4feb9c9e4acd0730729ff38d8d4cca1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d5943a99_36fab207","updated":"2026-03-18 06:20:46.000000000","message":"recheck","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8700caf39db623894bbee32ab252b8310eb86637","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0b76f412_23ce2f56","updated":"2026-04-21 03:47:00.000000000","message":"LGTM ..!","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"df21bd32853a859d9bd2275a78f3169a69798c35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"25897d1f_883342aa","updated":"2026-04-06 11:37:55.000000000","message":"LGTM now. Thanks Medha for addressing the comments.","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"219cf6ca47c84c8278346d19057c7a9818272af3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4d4103ed_836fde5f","updated":"2026-04-07 07:01:45.000000000","message":"LGTM. Thanks for fixing all comments and testing.","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a1c315f9a05d26ba0027b100e5a512df5ec09b7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5b8a3667_eb484c1e","updated":"2026-04-30 18:19:25.000000000","message":"THanks for working on the comments. Please take a look at the new questions inline","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"7d97d117d543449b285390d06039fe3f2a6b320f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2d255801_4a21283e","updated":"2026-04-08 06:00:47.000000000","message":"run-NetApp CI","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"45f549507a04f2da48c493d1573159ce7fb953b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"828f39a4_1e8880eb","updated":"2026-03-20 07:01:30.000000000","message":"run-NetApp CI","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"230946bfb5a1c85e1a443886005e0e0219b4630a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b214de47_04912d10","updated":"2026-03-20 10:50:27.000000000","message":"run-NetApp CI","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"771bcc00e06a74e785fdc50665c4eb2212a4d55d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b2ca9e0c_cb1ac881","updated":"2026-03-20 06:33:16.000000000","message":"run-NetApp CI","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"34ee2c6d99e430ca25963b8fd057e99b4d369eb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d03055df_5cc3e4da","updated":"2026-03-20 09:09:27.000000000","message":"run-NetApp CI","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"17fa9db800535c4af26f6cb00076517f20bfc3fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a5c06ead_fbc75211","updated":"2026-05-14 14:24:49.000000000","message":"@maurice.escher@sap.com - could you please take a look at this change? We think you might be familiar with the code paths and operations related to this change.","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"59a438fcf4f4b27ee1946ad624ba77a4ba73396e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9c52ae8b_1e2b1460","updated":"2026-05-20 22:50:39.000000000","message":"Hey I\u0027ve come back and forth to this change and am not convinced this is a good solution. We\u0027ve discussed this in-person too and we agreed that a solution for this would be a rethink on how LIFs should be created at all.. \n\n1) One LIFs can be assigned per HA Pair\n2) LIFs don\u0027t need to exist on nodes that don\u0027t own any of the aggregates assigned to the Vserver in question.. \n\n\n\n\nThe current patch\u0027s approach of filtering by \"node_up\u003dTrue\" is problematic because it makes the allocation count dynamic and couples it to a point-in-time health snapshot. You haven\u0027t responded to Carlos\u0027s earlier concern about the driver potentially \"losing\" allocations too because of this change..\n\nAnoop commented about this too that this is a temporary fix.. I don\u0027t why we\u0027d dig ourselves a technical debt and take this back to older stable branches with this temporary fix. I\u0027m against doing this. I think it\u0027s perfectly valid to take our time to design a solution here that works long term; and if you did it carefully, maybe you have the justification to backport the fix to stable branches. \n\nIf you think a real solution can\u0027t be arrived at, consider:\n\n1. allocating for ALL nodes as the driver is currently doing;  Keep get_network_allocations_number() returning total node count. This eliminates the\n\"flapping\" concern... the Neutron port count is stable regardless of node health.\n\n2. Create LIFs only on healthy nodes. In _setup_network_for_vserver(), skip down nodes; i.e., assign ports to healthy nodes and leave the extras unbound.\n\n3. Validate HA pair coverage. ONTAP nodes come in HA pairs as you mentioned. The /cluster/nodes REST API returns partner information. Before proceeding with a degraded create, the driver should check: for each HA pair, is at least one node up? If an entire HA pair is down, fail explicitly.. there\u0027s no failover target for that pair\u0027s storage.. this is the right thing to do imo\n\n4. Log the degraded state. Instead of silently proceeding, emit a clear warning: \"Cluster is degraded: nodes X are down. Creating LIFs on healthy nodes only. LIF failover to partner nodes will provide HA.\"\n\nThis allows a human operator to probably take the failed allocations and retry them after the nodes have come back online.. \n\nbut, ofc, the long term solution is preferable.","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3bb2ed5a_0567b093","updated":"2026-05-21 07:32:32.000000000","message":"Hi, please see my comments inline.\nThe -1 is for the easy wins to solve a few edge cases.\n\nEverything below FOLLOW-UP I expect to be irrelevant or solved by the aforementioned follow-up to the lif setup. I can live with these points for now, hoping the follow-up lands in the same release.","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"71f3c62504e1d5c0d2a6c07feee3606ff3897ab8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"77c108be_7b800285","updated":"2026-05-14 14:38:21.000000000","message":"LGTM","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a4dd81e81fa006ee451aa4591f2faedffd89fbc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e0e9140c_40624179","updated":"2026-05-08 06:06:41.000000000","message":"LGTM","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"38d11c40ee8628720482b0602d86814f6af217b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"74fdb2df_bc8432aa","updated":"2026-05-19 21:22:36.000000000","message":"LGTM, thanks Medha! @gouthampravi@gmail.com @maurice.escher@sap.com - could you please take a look?","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"601ea29305698160cc47ccef49ebc8c69240eceb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ee4a450a_10f4e90b","updated":"2026-05-21 07:47:34.000000000","message":"needs rework, see inline","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"601ea29305698160cc47ccef49ebc8c69240eceb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d164e2fc_2d30e83c","in_reply_to":"3bb2ed5a_0567b093","updated":"2026-05-21 07:47:34.000000000","message":"I did not want to contradict what Goutham said, I drafted my responses earlier yesterday and sent them without noticing his comments.\n\nTo not have mixed messages I\u0027m taking back my position. Better address it properly right here, please. (not in a follow-up)","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"020aa3c3f94c7895fcb71cbe5fa11478691ef72c","unresolved":true,"context_lines":[{"line_number":665,"context_line":"            return False"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    @na_utils.trace"},{"line_number":668,"context_line":"    def list_cluster_nodes(self, only_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param only_up: If True, return only nodes whose state is true."}],"source_content_type":"text/x-python","patch_set":3,"id":"a80b40fc_c230b229","line":668,"updated":"2026-03-03 05:33:23.000000000","message":"node_up\u003dFalse may resonate better as the name of the param.","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"4727d54bcc2d717f85bee5a57dfa9227ab87867f","unresolved":false,"context_lines":[{"line_number":665,"context_line":"            return False"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    @na_utils.trace"},{"line_number":668,"context_line":"    def list_cluster_nodes(self, only_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param only_up: If True, return only nodes whose state is true."}],"source_content_type":"text/x-python","patch_set":3,"id":"1cdeca27_e59cd908","line":668,"in_reply_to":"a80b40fc_c230b229","updated":"2026-03-03 11:34:37.000000000","message":"Done","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"57960cca66c260caaac737965e5ec949927f0f17","unresolved":true,"context_lines":[{"line_number":668,"context_line":"    def list_cluster_nodes(self, only_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param only_up: If True, return only nodes whose state is true."},{"line_number":672,"context_line":"                        If False (default), return all nodes that have a name."},{"line_number":673,"context_line":"        \"\"\""},{"line_number":674,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8f1f25_88fc38c4","line":671,"updated":"2026-03-03 04:56:03.000000000","message":"```suggestion\n        :param only_up: If True, return only nodes whose state is up/healthy.\n```","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"4727d54bcc2d717f85bee5a57dfa9227ab87867f","unresolved":false,"context_lines":[{"line_number":668,"context_line":"    def list_cluster_nodes(self, only_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param only_up: If True, return only nodes whose state is true."},{"line_number":672,"context_line":"                        If False (default), return all nodes that have a name."},{"line_number":673,"context_line":"        \"\"\""},{"line_number":674,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"39761190_2310d5ea","line":671,"in_reply_to":"ba8f1f25_88fc38c4","updated":"2026-03-03 11:34:37.000000000","message":"Done","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c7a04b6b24f807e1979ff708e6bd21893c2bf43","unresolved":true,"context_lines":[{"line_number":665,"context_line":"            return False"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    @na_utils.trace"},{"line_number":668,"context_line":"    def list_cluster_nodes(self, node_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param node_up: If True, return only nodes whose state is up/healthy."}],"source_content_type":"text/x-python","patch_set":4,"id":"aae6c66f_e30b656a","line":668,"range":{"start_line":668,"start_character":33,"end_line":668,"end_character":47},"updated":"2026-03-03 11:56:26.000000000","message":"What is the need of passing this parameter.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"ab282d9c4e31dee474a3385452ebc5d85a1d0e94","unresolved":false,"context_lines":[{"line_number":665,"context_line":"            return False"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    @na_utils.trace"},{"line_number":668,"context_line":"    def list_cluster_nodes(self, node_up\u003dFalse):"},{"line_number":669,"context_line":"        \"\"\"Get all available cluster nodes."},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        :param node_up: If True, return only nodes whose state is up/healthy."}],"source_content_type":"text/x-python","patch_set":4,"id":"b3c2aa43_348c5563","line":668,"range":{"start_line":668,"start_character":33,"end_line":668,"end_character":47},"in_reply_to":"aae6c66f_e30b656a","updated":"2026-03-05 07:15:50.000000000","message":"Had internal discussion with @anoop.shukla@netapp.com and @gawasthi2010@gmail.com, decided to keep the flag.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c7a04b6b24f807e1979ff708e6bd21893c2bf43","unresolved":true,"context_lines":[{"line_number":684,"context_line":"            \u0027attributes-list\u0027) or netapp_api.NaElement(\u0027none\u0027)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if node_up:"},{"line_number":687,"context_line":"            return ["},{"line_number":688,"context_line":"                node_info.get_child_content(\u0027node\u0027)"},{"line_number":689,"context_line":"                for node_info in nodes_info_list.get_children()"},{"line_number":690,"context_line":"                if node_info.get_child_content(\u0027is-node-healthy\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":691,"context_line":"                and node_info.get_child_content(\u0027node\u0027)"},{"line_number":692,"context_line":"            ]"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"        return ["},{"line_number":695,"context_line":"            node_info.get_child_content(\u0027node\u0027)"},{"line_number":696,"context_line":"            for node_info in nodes_info_list.get_children()"}],"source_content_type":"text/x-python","patch_set":4,"id":"187370b4_ee8885e5","line":693,"range":{"start_line":687,"start_character":11,"end_line":693,"end_character":0},"updated":"2026-03-03 11:56:26.000000000","message":"We can return this in all the cases, not need to pass the flag True or False","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"ab282d9c4e31dee474a3385452ebc5d85a1d0e94","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            \u0027attributes-list\u0027) or netapp_api.NaElement(\u0027none\u0027)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if node_up:"},{"line_number":687,"context_line":"            return ["},{"line_number":688,"context_line":"                node_info.get_child_content(\u0027node\u0027)"},{"line_number":689,"context_line":"                for node_info in nodes_info_list.get_children()"},{"line_number":690,"context_line":"                if node_info.get_child_content(\u0027is-node-healthy\u0027) \u003d\u003d \u0027true\u0027"},{"line_number":691,"context_line":"                and node_info.get_child_content(\u0027node\u0027)"},{"line_number":692,"context_line":"            ]"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"        return ["},{"line_number":695,"context_line":"            node_info.get_child_content(\u0027node\u0027)"},{"line_number":696,"context_line":"            for node_info in nodes_info_list.get_children()"}],"source_content_type":"text/x-python","patch_set":4,"id":"f21e7956_18ab4f95","line":693,"range":{"start_line":687,"start_character":11,"end_line":693,"end_character":0},"in_reply_to":"187370b4_ee8885e5","updated":"2026-03-05 07:15:50.000000000","message":"Had internal discussion with @anoop.shukla@netapp.com and @gawasthi2010@gmail.com, decided to keep the flag.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6b0ca91537798f4b914bfa7e0d9a8ec429dabc0a","unresolved":true,"context_lines":[{"line_number":415,"context_line":"            return ["},{"line_number":416,"context_line":"                node.get(\u0027name\u0027)"},{"line_number":417,"context_line":"                for node in records"},{"line_number":418,"context_line":"                if node.get(\u0027state\u0027) \u003d\u003d \u0027up\u0027 and node.get(\u0027name\u0027)"},{"line_number":419,"context_line":"            ]"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        return [node.get(\u0027name\u0027) for node in records if node.get(\u0027name\u0027)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"76629a0d_2e84ef75","line":418,"range":{"start_line":418,"start_character":49,"end_line":418,"end_character":65},"updated":"2026-03-11 15:49:33.000000000","message":"is there a case when a node would not have a name?","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2865c2ec3621f0c0ac9305e0b1745bdf6efe34a5","unresolved":true,"context_lines":[{"line_number":415,"context_line":"            return ["},{"line_number":416,"context_line":"                node.get(\u0027name\u0027)"},{"line_number":417,"context_line":"                for node in records"},{"line_number":418,"context_line":"                if node.get(\u0027state\u0027) \u003d\u003d \u0027up\u0027 and node.get(\u0027name\u0027)"},{"line_number":419,"context_line":"            ]"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        return [node.get(\u0027name\u0027) for node in records if node.get(\u0027name\u0027)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"80b7baf7_22863d0e","line":418,"range":{"start_line":418,"start_character":49,"end_line":418,"end_character":65},"in_reply_to":"76629a0d_2e84ef75","updated":"2026-03-13 13:39:52.000000000","message":"no, I think we all the nodes should have a name.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"378a4b2b57727d0d38468ac3e7569d236c26f14e","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            return ["},{"line_number":416,"context_line":"                node.get(\u0027name\u0027)"},{"line_number":417,"context_line":"                for node in records"},{"line_number":418,"context_line":"                if node.get(\u0027state\u0027) \u003d\u003d \u0027up\u0027 and node.get(\u0027name\u0027)"},{"line_number":419,"context_line":"            ]"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        return [node.get(\u0027name\u0027) for node in records if node.get(\u0027name\u0027)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"712d1d81_8b9f4a10","line":418,"range":{"start_line":418,"start_character":49,"end_line":418,"end_character":65},"in_reply_to":"80b7baf7_22863d0e","updated":"2026-03-26 14:00:23.000000000","message":"Acknowledged","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6b0ca91537798f4b914bfa7e0d9a8ec429dabc0a","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"32b2f144_c1a0c656","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"updated":"2026-03-11 15:49:33.000000000","message":"So as the code stands, our procedure does 1-1 port creation for all nodes, and we do expect that the nodes are available, which is causing this problem.\n\nMy biggest concern with this change is that list_cluster_node could get a different result for every single time this is being run, for example:\n\n1. At the moment of the creation, the cluster had node A up, but node B was down.\n2. We allow the share server to be created.\n3. At some point, for maintenance or other reasons node A needs to go down but node B is now up. The share would be not accessible even though there is one node.\n4. We attempt deleting the share server when node A is down and node b is up.\n\nWith the scenario above, there are some problems, being: not offering high availability, and leaving ports behind in the node, which could be a much bigger problem.\n\nBesides, there are many other places in the code that we also call list_cluster_nodes, some example are:\n\n_create_port_and_broadcast_domain - calls list cluster nodes. If we don\u0027t set node_up\u003dTrue, we would have a mismatch between that call and this one when we list the nodes.\n\nlist_cluster_nodes is called from get_network_allocations_number - which would be getting a wrong number of network allocations if node_up is not specified. If there are three nodes in the cluster but only one is available, we\u0027d be allocating three interfaces when we only needed one.\n\nSame for checking migration share server migration and many other places.\n\nAll of these calls must be evaluated and updated if needed.\n\nAt the end, I am not sure if ignoring the nodes that are down is the best approach to go with, considering all things I mentioned above. I am thinking of some alternatives now, but happy to brainstorm with you:\n\n1. We deny the share creation, as it is happening but add a user message.\n2. We allow the creation to proceed but introduce a periodic task in the driver. In the creation, we can use the private_storage to track whether one or more nodes were down during the share server creation, if any, the periodic task would then check from time if the node is up and attempt the port creation. \u003c- this seems a bit over-engineered and we\u0027d need to send information back to the share/manager, which would need to update the export locations.\n3. We allow the creation but also update ensure shares to compare nodes and interfaces, but that would mean a difference between the number of ports allocated vs the ones used, unless we can store it somewhere.\n\nI\u0027d be more inclined for option three, but we\u0027d need to make the correct number of allocations from neutron and store them somewhere in the driver.\n\nDoes this make sense?","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7c7a04b6b24f807e1979ff708e6bd21893c2bf43","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"5c7f78f4_5246d714","line":440,"range":{"start_line":440,"start_character":47,"end_line":440,"end_character":61},"updated":"2026-03-03 11:56:26.000000000","message":"Why we are passing this flag...?","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"378a4b2b57727d0d38468ac3e7569d236c26f14e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"ce7b2cb5_b389a12f","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"2286c063_5cad43d7","updated":"2026-03-26 14:00:23.000000000","message":"Done","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"5c15c65fd7fdbfce9cefd6588812c34ff2ef54fe","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a375f9b_0da8ccdc","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"32b2f144_c1a0c656","updated":"2026-03-11 20:49:08.000000000","message":"Another alternative that I was discussing with Goutham would be something we discussed a couple of days earlier: the driver should be finding the home node and partner node for each aggr assigned to the vserver and creating 1 LIF for each pair of nodes. If both home and partner are down, we should fail the share creation.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"7e448bf6293595c706a3bd3666e56c615c2ef4e6","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"fdb5466f_340fff5b","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"3a375f9b_0da8ccdc","updated":"2026-03-12 13:35:29.000000000","message":"Hi Carloss,\n\nAs we discussed during the review meeting, NFS recommendation is to have atleast one LIF available with failover policy set for the LIFs. ONTAP does not recommend creation of LIFs for all Nodes as there is nothing like multipathing that can be achieved in case of NAS. The way failovers are supposed to be managed is via the LIF failover to partner nodes. Creating one LIF per node has its own side affects where we can end up loosing IPs and reaching LIF limits per node on storage.\n\nDuring the Share Server creation, we are not sure which Aggr will be used (and indirectly which Node will the Share get placed onto). Hence a generic approach is taken which creates LIF on all nodes. On a \u003e2 node cluster, we can have LIFs created unnecessarily (even if SVMs are not mapped to the other node aggregates).\n\nA better approach to this problem and a holistic solution would be to decouple the LIF creation from SVM workflow to Share workflow. What we can do with that is, create LIF only on the Node (and may be partner Node) where the share is being created (or reuse an existing LIF if already present) and also provide options to setup failover policies on the LIFs so that if they go down, they migrate to the parnter node providing HA. And that is something we have added to our backlog and will be addressed soon.\n\nThis patch addresses the issue of failure of an SVM creation if a node is down. A node down ideally should not cause the SVM creation to fail because of LIF creation failing. Since the partner node is available and recommendation for NFS is to have atleast one LIF in \u0027up\u0027 state for mounts to be created on NFS clients.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"ab282d9c4e31dee474a3385452ebc5d85a1d0e94","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"3b03e78d_61183dcd","line":440,"range":{"start_line":440,"start_character":47,"end_line":440,"end_character":61},"in_reply_to":"5c7f78f4_5246d714","updated":"2026-03-05 07:15:50.000000000","message":"Had internal discussion with @anoop.shukla@netapp.com and @gawasthi2010@gmail.com, decided to keep the flag.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"b9146754aa6fad2622e03db48bc5ff08ba6b3e48","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"c2230f48_8ee1d978","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"b26b6799_c9b9ee82","updated":"2026-04-01 02:56:37.000000000","message":"Ontap api response for share server migration check https://paste.opendev.org/show/831893/\nI have tested share creation with standalone and neutron both are working fine. Please review the patch","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"cdd3dfaf3accdd7c0d10e7be7c41c3ecb3f2ca12","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"b26b6799_c9b9ee82","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"ce7b2cb5_b389a12f","updated":"2026-03-26 14:59:39.000000000","message":"I have added the nodeup\u003dTrue flag and test share creation which works fine. Share server migration check fails but that check is from ontap, from openstack we only call the POST https://\u003ccluster-mgmt-ip\u003e/api/svm/migrations which gives job uuid and then do GET https://\u003ccluster-mgmt-ip\u003e/api/cluster/jobs/\u003cjob_uuid\u003e\nONTAP\u0027s own job engine rejected the migration. Manila had no control over this — it simply received the failure response. \n\n\n\nrefer this for full log https://paste.opendev.org/show/bLlVdyneFG5YWPHOfGwf/","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2865c2ec3621f0c0ac9305e0b1745bdf6efe34a5","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":4,"id":"2286c063_5cad43d7","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"fdb5466f_340fff5b","updated":"2026-03-13 13:39:52.000000000","message":"Thanks @ces.eduardo98@gmail.com for you comments. I agree that we should make the changes as you suggested. @medhaj06@gmail.com, could you please evaluate all the areas where these changes need to be applied? I have listed a few methods where we have to make the changes, but please also check for any other places that may need updates.\n\n \n- get_network_allocations_number\n- _check_compatibility_for_svm_migrate\n- _create_port_and_broadcast_domain\n\nAlso, we need to test other feature while one of the node of HA pair is down \n- Share server creation\n- share server migration \n- Share server creation with StandAlone plugin \n- Share server creation with Neutron plugin\n- Bring the down node up and make sure all the manila share provisioning should work fine.","commit_id":"aeb52a6ec9e6cb00438037cb6ec20a6d10fd9e2b"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a1c315f9a05d26ba0027b100e5a512df5ec09b7d","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":5,"id":"76aaeba4_e92f6991","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"updated":"2026-04-30 18:19:25.000000000","message":"maybe this should be cached and sent to the setup network for vserver function? otherwise, it will list nodes there again and there is a chance the mismatch will keep happening, meaning my main concern with this is not addressed. This also needs to happen for _create_vserver_lifs, which is also doing a list_cluster_nodes call. If we don\u0027t do this, there is a chance we allocated either more or less IPs than we should\u0027ve.","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"33e815fbf4315dac23d275f67ba57d18aea082ae","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        mtu \u003d ref_subnet_allocation[\u0027mtu\u0027] or DEFAULT_MTU"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        home_ports \u003d {}"},{"line_number":440,"context_line":"        nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":441,"context_line":"        for node in nodes:"},{"line_number":442,"context_line":"            port \u003d self._get_node_data_port(node)"},{"line_number":443,"context_line":"            vlan_port_name \u003d self._client.create_port_and_broadcast_domain("}],"source_content_type":"text/x-python","patch_set":5,"id":"e4c2e190_c8a92155","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":61},"in_reply_to":"76aaeba4_e92f6991","updated":"2026-05-06 08:47:48.000000000","message":"updated the patch to use cached nodes in _setup_network_for_vserver. _create_vserver_lifs is already taking cached nodes \"lif_home_ports\u003dhome_ports\" so didn\u0027t made any change there. let me know if i have missed something.","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a1c315f9a05d26ba0027b100e5a512df5ec09b7d","unresolved":true,"context_lines":[{"line_number":1333,"context_line":"            self._check_data_lif_count_limit_reached_for_ha_pair(dest_client)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1336,"context_line":"        node_name \u003d self._client.list_cluster_nodes(node_up\u003dTrue)[0]"},{"line_number":1337,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1338,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1339,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("}],"source_content_type":"text/x-python","patch_set":5,"id":"de5f7c6f_d0c3f94d","line":1336,"range":{"start_line":1336,"start_character":8,"end_line":1336,"end_character":68},"updated":"2026-04-30 18:19:25.000000000","message":"if no nodes exist, this will throw an exception. Instead, something like this should be done:\n```suggestion\n        cluster_nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)\n        if custer_nodes:\n            node_name \u003d cluster_nodes[0]\n        else:\n            # raise an exception...\n\n```","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"33e815fbf4315dac23d275f67ba57d18aea082ae","unresolved":false,"context_lines":[{"line_number":1333,"context_line":"            self._check_data_lif_count_limit_reached_for_ha_pair(dest_client)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1336,"context_line":"        node_name \u003d self._client.list_cluster_nodes(node_up\u003dTrue)[0]"},{"line_number":1337,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1338,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1339,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("}],"source_content_type":"text/x-python","patch_set":5,"id":"9fce024a_c6cd4381","line":1336,"range":{"start_line":1336,"start_character":8,"end_line":1336,"end_character":68},"in_reply_to":"93353eab_ed4e2f75","updated":"2026-05-06 08:47:48.000000000","message":"Done","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ad207e629d7b689024af75ea7c8e4507d69965a1","unresolved":true,"context_lines":[{"line_number":1333,"context_line":"            self._check_data_lif_count_limit_reached_for_ha_pair(dest_client)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"        # 2. Create new ipspace, port and broadcast domain."},{"line_number":1336,"context_line":"        node_name \u003d self._client.list_cluster_nodes(node_up\u003dTrue)[0]"},{"line_number":1337,"context_line":"        port \u003d self._get_node_data_port(node_name)"},{"line_number":1338,"context_line":"        vlan \u003d network_info[\u0027network_allocations\u0027][0][\u0027segmentation_id\u0027]"},{"line_number":1339,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("}],"source_content_type":"text/x-python","patch_set":5,"id":"93353eab_ed4e2f75","line":1336,"range":{"start_line":1336,"start_character":8,"end_line":1336,"end_character":68},"in_reply_to":"de5f7c6f_d0c3f94d","updated":"2026-05-05 11:05:38.000000000","message":"I am not sure if there can be an ONTAP configuration without nodes. Although I agree that there can be an API issue which returns no records and this may end up throwing the error.","commit_id":"32a87cfd178be7f28855d173b35ab6ae032009ba"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":true,"context_lines":[{"line_number":370,"context_line":"            vserver_client \u003d self._get_api_client(vserver\u003dvserver_name)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            security_services \u003d network_info[0].get(\u0027security_services\u0027)"},{"line_number":373,"context_line":"            healthy_nodes \u003d self._client.list_cluster_nodes(node_up\u003dTrue)"},{"line_number":374,"context_line":"            try:"},{"line_number":375,"context_line":"                self._setup_network_for_vserver("},{"line_number":376,"context_line":"                    vserver_name, vserver_client, network_info, ipspace_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"f7e1ae9e_c9cf21a4","line":373,"range":{"start_line":373,"start_character":12,"end_line":373,"end_character":73},"updated":"2026-05-21 07:32:32.000000000","message":"If I get this right, the idea behind fetching the nodes here, is to have them the same throughout the whole vserver setup.\n\nSo the fetching should move up to the beginning of the method.\n\nAnd then we should re-use the healthy_nodes for \na) _get_node_data_port() (L 328), because the method may not work for a node that is down\nb) _create_port_and_broadcast_domain() (L 354), because this is calling the list nodes again and may fetch a different result otherwise\nc) like already done: _setup_network_for_vserver() (L 375)\n\n\nFOLLOW-UP:\nTo truly have it the same throughout the whole setup, we probably would have to store the nodes in the drivers private data like carloss said, because get_network_allocations_number() in allocate_network() could already have gotten a different number of nodes. See also my remark below about the zip.","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":true,"context_lines":[{"line_number":516,"context_line":"                 else self._client.list_cluster_nodes(node_up\u003dTrue))"},{"line_number":517,"context_line":"        # required"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        node_network_info \u003d zip(nodes, network_info[\u0027network_allocations\u0027])"},{"line_number":520,"context_line":"        # Creating LIF per node"},{"line_number":521,"context_line":"        for node_name, network_allocation in node_network_info:"},{"line_number":522,"context_line":"            lif_home_port \u003d (lif_home_ports[node_name] if"}],"source_content_type":"text/x-python","patch_set":7,"id":"eeca3946_3c57ffe9","line":519,"updated":"2026-05-21 07:32:32.000000000","message":"This zip here makes sure that if either the number of nodes or the number of allocations is not matching, we get the lower count.\n\ne.g. in 2-node cluster:\na) 1 allocation (because one node was down during network allocation), but 2 nodes -\u003e 1 lif\nb) 2 allocations, but 1 node (because 1 node during this method here) -\u003e 1 lif\n\n\nIt is worth adding a comment.\n\n\nFOLLOW-UP:\n\nWhat I don\u0027t like about it: \na 1) suddenly having a heterogenous setup, e.g. same share type, backend etc, but different number of lifs for otherwise similar share servers and hence different number of export locations presented to the client.\na 2) if the volume moves to a different home node, the lif should be moved (net-interface-migrate), too, which is currently not covered for share migrate, but should be addressed in the follow-up. Otherwise there would be no export location being marked as preferred.\nb) having unused allocation(s) - I think those would be properly cleaned up on teardown already. But anyway during the lifetime of the share server it does not make sense to hold those IP reservations.","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":true,"context_lines":[{"line_number":1352,"context_line":"        destination_ipspace \u003d self._client.get_ipspace_name_for_vlan_port("},{"line_number":1353,"context_line":"            node_name, port, vlan) or self._create_ipspace("},{"line_number":1354,"context_line":"            network_info, client\u003ddest_client)"},{"line_number":1355,"context_line":"        self._create_port_and_broadcast_domain("},{"line_number":1356,"context_line":"            destination_ipspace, network_info)"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"        def _cleanup_ipspace(ipspace):"},{"line_number":1359,"context_line":"            if not dest_client.delete_ipspace(ipspace):"}],"source_content_type":"text/x-python","patch_set":7,"id":"089c0e77_3e4f70c7","line":1356,"range":{"start_line":1355,"start_character":8,"end_line":1356,"end_character":46},"updated":"2026-05-21 07:32:32.000000000","message":"same like above: previously fetched `cluster_nodes` should be passed down to _create_port_and_broadcast_domain() to avoid fetching them there again and possibly getting a different result","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"}],"manila/tests/share/drivers/netapp/dataontap/client/fakes.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":true,"context_lines":[{"line_number":3716,"context_line":"    \"records\": ["},{"line_number":3717,"context_line":"        {"},{"line_number":3718,"context_line":"            \"uuid\": \"fake_uuid\","},{"line_number":3719,"context_line":"            \"name\": CLUSTER_NAME,"},{"line_number":3720,"context_line":"            \"state\": \"up\","},{"line_number":3721,"context_line":"            \"version\": FAKE_GET_ONTAP_VERSION_REST[\"version\"],"},{"line_number":3722,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":7,"id":"13cb3118_4d8d4c32","line":3719,"range":{"start_line":3719,"start_character":20,"end_line":3719,"end_character":32},"updated":"2026-05-21 07:32:32.000000000","message":"this could be `NODE_NAME` instead","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"b1a1d7fe6cca64c4bca6cb92f3bfd2b54f692c65","unresolved":true,"context_lines":[{"line_number":3722,"context_line":"        },"},{"line_number":3723,"context_line":"        {"},{"line_number":3724,"context_line":"            \"uuid\": \"fake_uuid_2\","},{"line_number":3725,"context_line":"            \"name\": NODE_NAME,"},{"line_number":3726,"context_line":"            \"state\": \"down\","},{"line_number":3727,"context_line":"            \"version\": FAKE_GET_ONTAP_VERSION_REST[\"version\"],"},{"line_number":3728,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":7,"id":"04ec3616_66905bcb","line":3725,"range":{"start_line":3725,"start_character":20,"end_line":3725,"end_character":29},"updated":"2026-05-21 07:32:32.000000000","message":"and this could be `NODE_NAME2` then","commit_id":"9ed1b745d5241b8e0467cf124ce5f02f783f91b1"}],"manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode_rest.py":[{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"57960cca66c260caaac737965e5ec949927f0f17","unresolved":true,"context_lines":[{"line_number":385,"context_line":"        ]"},{"line_number":386,"context_line":"        self.assertEqual(expected_default, default_result)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # Optional behavior: only return nodes that are \u0027up\u0027."},{"line_number":389,"context_line":"        self.client.send_request.reset_mock()"},{"line_number":390,"context_line":"        only_up_result \u003d self.client.list_cluster_nodes(only_up\u003dTrue)"},{"line_number":391,"context_line":"        self.client.send_request.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"46e49396_4c6ecec2","line":388,"updated":"2026-03-03 04:56:03.000000000","message":"Please add this scenario as separate test case instead of clubbing in same. You can use @ddt.data() approach to vary in same test case.","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"4727d54bcc2d717f85bee5a57dfa9227ab87867f","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        ]"},{"line_number":386,"context_line":"        self.assertEqual(expected_default, default_result)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # Optional behavior: only return nodes that are \u0027up\u0027."},{"line_number":389,"context_line":"        self.client.send_request.reset_mock()"},{"line_number":390,"context_line":"        only_up_result \u003d self.client.list_cluster_nodes(only_up\u003dTrue)"},{"line_number":391,"context_line":"        self.client.send_request.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa2bbbb_33067033","line":388,"in_reply_to":"46e49396_4c6ecec2","updated":"2026-03-03 11:34:37.000000000","message":"Done","commit_id":"1bd8d77fff817a1496b93b6424c2c835c08c614a"}]}
