|
12 | 12 | # Copyright (c) 2016 ScyllaDB
|
13 | 13 |
|
14 | 14 | # pylint: disable=too-many-lines
|
| 15 | +from __future__ import annotations |
| 16 | + |
15 | 17 | import contextlib
|
16 | 18 | import queue
|
17 | 19 | import logging
|
@@ -2602,7 +2604,7 @@ def check_node_health(self, retries: int = CHECK_NODE_HEALTH_RETRIES) -> None:
|
2602 | 2604 | CHECK_NODE_HEALTH_RETRY_DELAY, self.name)
|
2603 | 2605 | time.sleep(CHECK_NODE_HEALTH_RETRY_DELAY)
|
2604 | 2606 |
|
2605 |
| - def get_nodes_status(self): |
| 2607 | + def get_nodes_status(self) -> dict[BaseNode, dict]: |
2606 | 2608 | nodes_status = {}
|
2607 | 2609 | try:
|
2608 | 2610 | statuses = self.parent_cluster.get_nodetool_status(verification_node=self)
|
@@ -2660,7 +2662,7 @@ def get_peers_info(self):
|
2660 | 2662 | return peers_details
|
2661 | 2663 |
|
2662 | 2664 | @retrying(n=5, sleep_time=10, raise_on_exceeded=False)
|
2663 |
| - def get_gossip_info(self): |
| 2665 | + def get_gossip_info(self) -> dict[BaseNode, dict]: |
2664 | 2666 | gossip_info = self.run_nodetool('gossipinfo', verbose=False, warning_event_on_exception=(Exception,),
|
2665 | 2667 | publish_event=False)
|
2666 | 2668 | LOGGER.debug("get_gossip_info: %s", gossip_info)
|
@@ -3180,7 +3182,7 @@ def tags(self) -> Dict[str, str]:
|
3180 | 3182 | def dead_nodes_ip_address_list(self):
|
3181 | 3183 | return [node.ip_address for node in self.dead_nodes_list]
|
3182 | 3184 |
|
3183 |
| - def get_ip_to_node_map(self): |
| 3185 | + def get_ip_to_node_map(self) -> dict[str, BaseNode]: |
3184 | 3186 | """returns {ip: node} map for all nodes in cluster to get node by ip"""
|
3185 | 3187 | return {ip: node for node in self.nodes for ip in node.get_all_ip_addresses()}
|
3186 | 3188 |
|
@@ -3219,8 +3221,12 @@ def get_rack_names_per_datacenter_and_rack_idx(self, db_nodes: list[BaseNode] |
|
3219 | 3221 | db_nodes = db_nodes if db_nodes else self.nodes
|
3220 | 3222 | status = db_nodes[0].get_nodes_status()
|
3221 | 3223 |
|
| 3224 | + # intersection of asked nodes and nodes returned by nodetool status |
| 3225 | + # since topology might change during this command execution |
| 3226 | + actual_db_nodes = set(status.keys()).intersection(db_nodes) |
| 3227 | + |
3222 | 3228 | rack_names_mapping = {}
|
3223 |
| - for (region, rack), nodes in self.nodes_by_racks_idx_and_regions(nodes=db_nodes).items(): |
| 3229 | + for (region, rack), nodes in self.nodes_by_racks_idx_and_regions(nodes=actual_db_nodes).items(): |
3224 | 3230 | rack_names_mapping[(region, rack)] = status[nodes[0]]['rack']
|
3225 | 3231 |
|
3226 | 3232 | return rack_names_mapping
|
|
0 commit comments