)]}'
{"/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"}],"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"}],"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"}]}
