)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix NetApp perf counter retrieval when node down"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Add get_owner_node_for_aggregate function to retrieve"},{"line_number":10,"context_line":"  current owner node of aggregate for takeover scenarios"},{"line_number":11,"context_line":"  where owner may differ from home node"},{"line_number":12,"context_line":"- Fix owner node retrieval for aggregates when home node"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"25feef82_6eaa5434","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":34},"updated":"2026-06-25 23:07:24.000000000","message":"this method became get_node_for_aggregate","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}],"/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":"58656369c2651fa0ce8e55470a5f22fa6e93f345","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"34c10ac6_02f31798","updated":"2026-03-25 08:40:08.000000000","message":"Please look at the comment","commit_id":"d90ec96bf4ee42a89f828820aa3e6e82065f4dac"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4f1fd991c4b1bff58479e7dace0ef28a14d0bd50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ff56badc_fa5cc345","updated":"2026-03-25 08:33:31.000000000","message":"Run-NetApp CI","commit_id":"d90ec96bf4ee42a89f828820aa3e6e82065f4dac"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d6efc2af1f590282d738ac5146836c2ed703a5bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"66669e12_c1ed002e","updated":"2026-05-04 17:48:43.000000000","message":"Please handle the open comments.","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a9aa7ec5f77f14ddbe4692acc1ee79aaf81682d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3e63ac27_3514f756","updated":"2026-05-04 08:03:06.000000000","message":"not giving a -1, because I could also live with keeping it like it is - but please have a look at my comments ;)","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"419cc542ae094a9187d7c5afa70d8ed1bca7be78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"41b9a8ae_debdd286","updated":"2026-05-26 15:29:38.000000000","message":"LGTM","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"638ed6822e786e80396e7c5dee211988bfbcd1cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"32dc4436_b5cd6655","updated":"2026-06-02 12:10:02.000000000","message":"lgtm, just one test is duplicated, see below","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"d9c35ad618c503deb1aa18bade45b86b5b95c4c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4cc2139e_0b167b29","updated":"2026-06-02 07:24:08.000000000","message":"recheck","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"1d9bb3087ff4d27c68b9eb6f004fb96dfe59d8ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4d4141a6_0ba2315e","updated":"2026-05-27 07:47:17.000000000","message":"run-NetApp CI\nrecheck","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"b75ac54b4358e198b0a1fe9343883d9eb14600d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"aacc53e3_59e060a7","updated":"2026-06-25 15:33:47.000000000","message":"Bumping to +2","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c3e6fd227316eaaa697d8b4e9d244e606ee92a6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f5b4ef69_07cb9cb2","updated":"2026-06-25 15:35:23.000000000","message":"LGTM ..!","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"efecec38_6ef3263f","updated":"2026-06-25 23:07:24.000000000","message":"There are some comments inline that you could tackle in a follow up, or respond to. Thanks for working on this bug. \n\nIf you\u0027re going to back port this change, please note that you\u0027ll have to squash the follow up commit (if/when you make it) and this one into one backport, and you\u0027ve to note that detail in the commit message","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"cfcfaa905efd29bc1c2b634b6e174d062dfd4b93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c8a57df7_dc278ae4","updated":"2026-06-25 15:36:32.000000000","message":"run-NetApp CI","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}],"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":"58656369c2651fa0ce8e55470a5f22fa6e93f345","unresolved":true,"context_lines":[{"line_number":1488,"context_line":"            \u0027aggr-ownership-attributes\u0027) or netapp_api.NaElement(\u0027none\u0027)"},{"line_number":1489,"context_line":"        return aggr_ownership_attrs.get_child_content(\u0027home-name\u0027)"},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":1492,"context_line":"        \"\"\"Get owner node for the specified aggregate.\"\"\""},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d2cda864_370a2c56","line":1491,"updated":"2026-03-25 08:40:08.000000000","message":"I see there are other places where we are looking for home node. One place being: \n\nhttps://opendev.org/openstack/manila/src/commit/0e56a348aa9a0300d9eec1e673d614e27e0e6ae4/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py#L445\n\nDo we need to fix those areas as well?","commit_id":"d90ec96bf4ee42a89f828820aa3e6e82065f4dac"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"1ef846da3a6f12d666569bb77e6f840db5e883c4","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"            \u0027aggr-ownership-attributes\u0027) or netapp_api.NaElement(\u0027none\u0027)"},{"line_number":1489,"context_line":"        return aggr_ownership_attrs.get_child_content(\u0027home-name\u0027)"},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":1492,"context_line":"        \"\"\"Get owner node for the specified aggregate.\"\"\""},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ce39ae8_48a04b8d","line":1491,"in_reply_to":"5978038a_bf987f97","updated":"2026-03-30 12:39:56.000000000","message":"Done","commit_id":"d90ec96bf4ee42a89f828820aa3e6e82065f4dac"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"b820245f58dd1cc6abab8b8ab906922f6aad76ad","unresolved":true,"context_lines":[{"line_number":1488,"context_line":"            \u0027aggr-ownership-attributes\u0027) or netapp_api.NaElement(\u0027none\u0027)"},{"line_number":1489,"context_line":"        return aggr_ownership_attrs.get_child_content(\u0027home-name\u0027)"},{"line_number":1490,"context_line":""},{"line_number":1491,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":1492,"context_line":"        \"\"\"Get owner node for the specified aggregate.\"\"\""},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5978038a_bf987f97","line":1491,"in_reply_to":"d2cda864_370a2c56","updated":"2026-03-25 18:18:27.000000000","message":"No, those places likely don\u0027t need the same fix, because they serve different purposes.\n\nFor my fix we need current owner node instead of home node, because sometimes we can have the failovers and owner node will be inactive.\n\nFor the places, which you linked here the preferred path logic intentionally uses home nodes to report stable path preferences regardless of current failover state.","commit_id":"d90ec96bf4ee42a89f828820aa3e6e82065f4dac"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.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":"688b9d8fbad77a1317bda4d02411678d12d45303","unresolved":true,"context_lines":[{"line_number":617,"context_line":"        return aggrs[0][\u0027home_node\u0027][\u0027name\u0027] if aggrs else None"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    @na_utils.trace"},{"line_number":620,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":621,"context_line":"        \"\"\"Get current owner node for the specified aggregate.\"\"\""},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"e991a6ba_5669514b","line":620,"updated":"2026-04-14 15:30:15.000000000","message":"Is there a way to use the same method but fetch the home_node name and node.name instead of creating a new method? That would mean that the get_node_for_aggregate would return both home_node.name and node.name. Caller can choose to use either node.name or home_node.name as required?","commit_id":"9f673111a6e4a786ad509a86cf8c6b099a326137"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"8bde975ddfafaf107aacea418cd6f70fb403464f","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        return aggrs[0][\u0027home_node\u0027][\u0027name\u0027] if aggrs else None"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    @na_utils.trace"},{"line_number":620,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":621,"context_line":"        \"\"\"Get current owner node for the specified aggregate.\"\"\""},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"64c4ef30_48a768f6","line":620,"in_reply_to":"0d69da2d_e0d9f4bf","updated":"2026-04-27 12:43:13.000000000","message":"Done","commit_id":"9f673111a6e4a786ad509a86cf8c6b099a326137"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"6da9507affe0d1ddacc760ba56c646e476a81f15","unresolved":true,"context_lines":[{"line_number":617,"context_line":"        return aggrs[0][\u0027home_node\u0027][\u0027name\u0027] if aggrs else None"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    @na_utils.trace"},{"line_number":620,"context_line":"    def get_owner_node_for_aggregate(self, aggregate_name):"},{"line_number":621,"context_line":"        \"\"\"Get current owner node for the specified aggregate.\"\"\""},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if not aggregate_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"0d69da2d_e0d9f4bf","line":620,"in_reply_to":"e991a6ba_5669514b","updated":"2026-04-16 13:17:29.000000000","message":"Done","commit_id":"9f673111a6e4a786ad509a86cf8c6b099a326137"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a9aa7ec5f77f14ddbe4692acc1ee79aaf81682d7","unresolved":true,"context_lines":[{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if aggr.get(\u0027home_node\u0027) and aggr[\u0027home_node\u0027].get(\u0027name\u0027):"},{"line_number":624,"context_line":"            home_node \u003d aggr[\u0027home_node\u0027][\u0027name\u0027]"},{"line_number":625,"context_line":"            owner_node \u003d aggr[\u0027node\u0027][\u0027name\u0027]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        return {"},{"line_number":628,"context_line":"            \u0027home_node\u0027: home_node,"}],"source_content_type":"text/x-python","patch_set":8,"id":"2c40f396_0b15bbe6","line":625,"updated":"2026-05-04 08:03:06.000000000","message":"Should this be outside the if-clause? Or is it a given that if `home_node` exists, we can assume that `node` is there, too?","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d6efc2af1f590282d738ac5146836c2ed703a5bb","unresolved":true,"context_lines":[{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if aggr.get(\u0027home_node\u0027) and aggr[\u0027home_node\u0027].get(\u0027name\u0027):"},{"line_number":624,"context_line":"            home_node \u003d aggr[\u0027home_node\u0027][\u0027name\u0027]"},{"line_number":625,"context_line":"            owner_node \u003d aggr[\u0027node\u0027][\u0027name\u0027]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        return {"},{"line_number":628,"context_line":"            \u0027home_node\u0027: home_node,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bd0919c2_2d6a9f8f","line":625,"in_reply_to":"2c40f396_0b15bbe6","updated":"2026-05-04 17:48:43.000000000","message":"Agreed, we should check for node details in the if clause as well.","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"aae761e0131d8f5d935abc905abbcd5b5c7907f3","unresolved":false,"context_lines":[{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if aggr.get(\u0027home_node\u0027) and aggr[\u0027home_node\u0027].get(\u0027name\u0027):"},{"line_number":624,"context_line":"            home_node \u003d aggr[\u0027home_node\u0027][\u0027name\u0027]"},{"line_number":625,"context_line":"            owner_node \u003d aggr[\u0027node\u0027][\u0027name\u0027]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        return {"},{"line_number":628,"context_line":"            \u0027home_node\u0027: home_node,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5b336a94_424a77e3","line":625,"in_reply_to":"bd0919c2_2d6a9f8f","updated":"2026-05-11 12:11:45.000000000","message":"Done","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":true,"context_lines":[{"line_number":620,"context_line":"        home_node \u003d None"},{"line_number":621,"context_line":"        owner_node \u003d None"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if (aggr.get(\u0027home_node\u0027) and aggr[\u0027home_node\u0027].get(\u0027name\u0027)"},{"line_number":624,"context_line":"                and aggr.get(\u0027node\u0027) and aggr[\u0027node\u0027].get(\u0027name\u0027)):"},{"line_number":625,"context_line":"            home_node \u003d aggr[\u0027home_node\u0027][\u0027name\u0027]"},{"line_number":626,"context_line":"            owner_node \u003d aggr[\u0027node\u0027][\u0027name\u0027]"},{"line_number":627,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"4c659c1b_d0fd48f0","line":624,"range":{"start_line":623,"start_character":8,"end_line":624,"end_character":66},"updated":"2026-06-25 23:07:24.000000000","message":"i wonder if this has been tested in the takeover scenario.. looks like ZAPI code has this slightly differently:\n\n```\n      home_node \u003d aggr.get(\u0027home_node\u0027, {}).get(\u0027name\u0027)\n      owner_node \u003d aggr.get(\u0027node\u0027, {}).get(\u0027name\u0027)\n```\n\nthe effect is the same as initializing  \n\n```\nhome_node \u003d None\nowner_node \u003d None\n```\nin case there\u0027s no data.","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}],"manila/share/drivers/netapp/dataontap/cluster_mode/performance.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a9aa7ec5f77f14ddbe4692acc1ee79aaf81682d7","unresolved":true,"context_lines":[{"line_number":154,"context_line":"                self.zapi_client.get_node_for_aggregate(aggr_name))"},{"line_number":155,"context_line":"            if node_name and node_name.get(\u0027owner_node\u0027):"},{"line_number":156,"context_line":"                node_names.add(node_name[\u0027owner_node\u0027])"},{"line_number":157,"context_line":"                aggr_node_map[aggr_name] \u003d node_name"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        return list(node_names), aggr_node_map"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"c47c3444_1bcf7c5d","line":157,"range":{"start_line":157,"start_character":43,"end_line":157,"end_character":52},"updated":"2026-05-04 08:03:06.000000000","message":"I think it is easier to handle if we directly store only the owner node in the map\n\ni.e. \n```\naggr_node_map[aggr_name] \u003d node_name[\u0027owner_node\u0027]\n```","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"aae761e0131d8f5d935abc905abbcd5b5c7907f3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                self.zapi_client.get_node_for_aggregate(aggr_name))"},{"line_number":155,"context_line":"            if node_name and node_name.get(\u0027owner_node\u0027):"},{"line_number":156,"context_line":"                node_names.add(node_name[\u0027owner_node\u0027])"},{"line_number":157,"context_line":"                aggr_node_map[aggr_name] \u003d node_name"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        return list(node_names), aggr_node_map"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"b80fd0c7_d3aff32d","line":157,"range":{"start_line":157,"start_character":43,"end_line":157,"end_character":52},"in_reply_to":"c47c3444_1bcf7c5d","updated":"2026-05-11 12:11:45.000000000","message":"Done","commit_id":"82759e8673bf8ec2abc4ed7a8dcea70646a45892"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":true,"context_lines":[{"line_number":149,"context_line":"        aggr_node_map \u003d {}"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        for aggr_name in aggr_names:"},{"line_number":152,"context_line":"            node_name \u003d ("},{"line_number":153,"context_line":"                self.zapi_client.get_node_for_aggregate(aggr_name))"},{"line_number":154,"context_line":"            if node_name and node_name.get(\u0027owner_node\u0027):"},{"line_number":155,"context_line":"                node_names.add(node_name[\u0027owner_node\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"378ba49f_72a44a0b","line":152,"range":{"start_line":152,"start_character":12,"end_line":152,"end_character":21},"updated":"2026-06-25 23:07:24.000000000","message":"since this is now a dict, not a single string, you should probably call it \"node_info\" like you\u0027re doing in lib_base","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}],"manila/tests/share/drivers/netapp/dataontap/client/fakes.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":true,"context_lines":[{"line_number":3922,"context_line":"    ],"},{"line_number":3923,"context_line":"    \"num_records\": 2,"},{"line_number":3924,"context_line":"}"},{"line_number":3925,"context_line":""},{"line_number":3926,"context_line":"AGGR_GET_OWNER_NODE_RESPONSE_REST \u003d {"},{"line_number":3927,"context_line":"    \"records\": ["},{"line_number":3928,"context_line":"        {"},{"line_number":3929,"context_line":"            \"uuid\": \"fake_uuid_1\","},{"line_number":3930,"context_line":"            \"name\": \"fake_aggr1\","},{"line_number":3931,"context_line":"            \"node\": {"},{"line_number":3932,"context_line":"                \"name\": NODE_NAME"},{"line_number":3933,"context_line":"            },"},{"line_number":3934,"context_line":"        }"},{"line_number":3935,"context_line":"    ],"},{"line_number":3936,"context_line":"    \"num_records\": 1,"},{"line_number":3937,"context_line":"}"},{"line_number":3938,"context_line":""},{"line_number":3939,"context_line":"AGGR_GET_OWNER_NODE_FAILOVER_RESPONSE_REST \u003d {"},{"line_number":3940,"context_line":"    \"records\": ["},{"line_number":3941,"context_line":"        {"}],"source_content_type":"text/x-python","patch_set":10,"id":"fdbfa120_2b8cb935","line":3938,"range":{"start_line":3925,"start_character":0,"end_line":3938,"end_character":0},"updated":"2026-06-25 23:07:24.000000000","message":"unused","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}],"manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode_rest.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"638ed6822e786e80396e7c5dee211988bfbcd1cf","unresolved":true,"context_lines":[{"line_number":677,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1],"},{"line_number":678,"context_line":"        }, result)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    def test_get_owner_node_for_aggregate_failover(self):"},{"line_number":681,"context_line":"        response \u003d fake.AGGR_GET_OWNER_NODE_FAILOVER_RESPONSE_REST[\u0027records\u0027]"},{"line_number":682,"context_line":"        self.mock_object(self.client,"},{"line_number":683,"context_line":"                         \u0027_get_aggregates\u0027,"},{"line_number":684,"context_line":"                         mock.Mock(return_value\u003dresponse))"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        result \u003d self.client.get_node_for_aggregate("},{"line_number":687,"context_line":"            fake.SHARE_AGGREGATE_NAME)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        self.assertEqual({"},{"line_number":690,"context_line":"            \u0027home_node\u0027: fake.NODE_NAMES[0],"},{"line_number":691,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1]"},{"line_number":692,"context_line":"        }, result)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def test_get_owner_node_for_aggregate_no_name(self):"},{"line_number":695,"context_line":"        result \u003d self.client.get_node_for_aggregate(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b0ff2519_0ecd07f1","line":692,"range":{"start_line":680,"start_character":0,"end_line":692,"end_character":18},"updated":"2026-06-02 12:10:02.000000000","message":"This is a duplicate of test_get_owner_node_for_aggregate() above","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"c881a2d76f83e93926d561271795a975140ea0be","unresolved":true,"context_lines":[{"line_number":677,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1],"},{"line_number":678,"context_line":"        }, result)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    def test_get_owner_node_for_aggregate_failover(self):"},{"line_number":681,"context_line":"        response \u003d fake.AGGR_GET_OWNER_NODE_FAILOVER_RESPONSE_REST[\u0027records\u0027]"},{"line_number":682,"context_line":"        self.mock_object(self.client,"},{"line_number":683,"context_line":"                         \u0027_get_aggregates\u0027,"},{"line_number":684,"context_line":"                         mock.Mock(return_value\u003dresponse))"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        result \u003d self.client.get_node_for_aggregate("},{"line_number":687,"context_line":"            fake.SHARE_AGGREGATE_NAME)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        self.assertEqual({"},{"line_number":690,"context_line":"            \u0027home_node\u0027: fake.NODE_NAMES[0],"},{"line_number":691,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1]"},{"line_number":692,"context_line":"        }, result)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def test_get_owner_node_for_aggregate_no_name(self):"},{"line_number":695,"context_line":"        result \u003d self.client.get_node_for_aggregate(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dbe02430_42562dd3","line":692,"range":{"start_line":680,"start_character":0,"end_line":692,"end_character":18},"in_reply_to":"b0ff2519_0ecd07f1","updated":"2026-06-02 12:31:54.000000000","message":"Fixed","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"},{"author":{"_account_id":38910,"name":"Nikita Skakun","display_name":"Nikita","email":"nikita.skakun@sap.com","username":"nikita-skakun"},"change_message_id":"297248c7fd6e740cd0fa2b4838524088d4c47ce7","unresolved":false,"context_lines":[{"line_number":677,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1],"},{"line_number":678,"context_line":"        }, result)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    def test_get_owner_node_for_aggregate_failover(self):"},{"line_number":681,"context_line":"        response \u003d fake.AGGR_GET_OWNER_NODE_FAILOVER_RESPONSE_REST[\u0027records\u0027]"},{"line_number":682,"context_line":"        self.mock_object(self.client,"},{"line_number":683,"context_line":"                         \u0027_get_aggregates\u0027,"},{"line_number":684,"context_line":"                         mock.Mock(return_value\u003dresponse))"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        result \u003d self.client.get_node_for_aggregate("},{"line_number":687,"context_line":"            fake.SHARE_AGGREGATE_NAME)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        self.assertEqual({"},{"line_number":690,"context_line":"            \u0027home_node\u0027: fake.NODE_NAMES[0],"},{"line_number":691,"context_line":"            \u0027owner_node\u0027: fake.NODE_NAMES[1]"},{"line_number":692,"context_line":"        }, result)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def test_get_owner_node_for_aggregate_no_name(self):"},{"line_number":695,"context_line":"        result \u003d self.client.get_node_for_aggregate(\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"e32bd72a_5eaa7d7a","line":692,"range":{"start_line":680,"start_character":0,"end_line":692,"end_character":18},"in_reply_to":"dbe02430_42562dd3","updated":"2026-06-02 12:32:17.000000000","message":"Done","commit_id":"844d762aa83888004dd79e11f7b7e97c2b3861aa"}],"releasenotes/notes/owner-node-for-aggregates-issue-d90ec96bf4ee42a8.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"68fb0987ee0911e7b70ce26e16c66cbf3eb8a016","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added `get_owner_node_for_aggregate()` function to both ZAPI and"},{"line_number":5,"context_line":"    REST API clients to retrieve the current owner node of an aggregate"},{"line_number":6,"context_line":"    instead of only the home node. This distinction is critical in"},{"line_number":7,"context_line":"    failover scenarios where the aggregate owner may differ from its"},{"line_number":8,"context_line":"    home node. Updated the performance library to use the owner node"},{"line_number":9,"context_line":"    instead of the home node when retrieving performance data"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"63a8f8d7_b22eff6e","line":9,"range":{"start_line":4,"start_character":4,"end_line":9,"end_character":61},"updated":"2026-06-25 23:07:24.000000000","message":"this doesn\u0027t make much sense to an operator unless they intimately know the NetApp driver\u0027s code. Also, the driver name isn\u0027t called out. \n\nPlease see how release notes are rendered: https://docs.openstack.org/releasenotes/manila/2026.1.html\n\nYou\u0027ll notice that everything is aggregated, and written in a way to let operators know what changed.\n\nAlso, i didn\u0027t see a method called \"get_owner_node_for_aggregate\"","commit_id":"adc1db65af93df66ebcd83c8f1961b8f9640edc4"}]}
