9
9
10
10
11
11
@contextlib .contextmanager
12
- def block_scylla_ports (target_node : " BaseNode" , ports : list [int ] | None = None ):
12
+ def block_scylla_ports (target_node : BaseNode , ports : list [int ] | None = None ):
13
13
ports = ports or [7001 , 7000 , 9042 , 9142 , 19042 , 19142 ]
14
14
target_node .install_package ("iptables" )
15
15
target_node .start_service ("iptables" , ignore_status = True )
16
16
target_node .log .debug ("Block connections %s" , target_node .name )
17
17
for port in ports :
18
18
target_node .remoter .sudo (f"iptables -A INPUT -p tcp --dport { port } -j DROP" )
19
19
target_node .remoter .sudo (f"iptables -A OUTPUT -p tcp --dport { port } -j DROP" )
20
+ target_node .remoter .sudo (f"ip6tables -A INPUT -p tcp --dport { port } -j DROP" )
21
+ target_node .remoter .sudo (f"ip6tables -A OUTPUT -p tcp --dport { port } -j DROP" )
20
22
yield
21
23
target_node .log .debug ("Remove all iptable rules %s" , target_node .name )
22
24
for port in ports :
23
25
target_node .remoter .sudo (f"iptables -D INPUT -p tcp --dport { port } -j DROP" )
24
26
target_node .remoter .sudo (f"iptables -D OUTPUT -p tcp --dport { port } -j DROP" )
27
+ target_node .remoter .sudo (f"ip6tables -D INPUT -p tcp --dport { port } -j DROP" )
28
+ target_node .remoter .sudo (f"ip6tables -D OUTPUT -p tcp --dport { port } -j DROP" )
25
29
target_node .stop_service ("iptables" , ignore_status = True )
26
30
27
31
28
32
@contextlib .contextmanager
29
- def pause_scylla_with_sigstop (target_node : " BaseNode" ):
33
+ def pause_scylla_with_sigstop (target_node : BaseNode ):
30
34
target_node .log .debug ("Send signal SIGSTOP to scylla process on node %s" , target_node .name )
31
35
target_node .remoter .sudo ("pkill --signal SIGSTOP -e scylla" , timeout = 60 )
32
36
yield
33
37
target_node .log .debug ("Send signal SIGCONT to scylla process on node %s" , target_node .name )
34
38
target_node .remoter .sudo (cmd = "pkill --signal SIGCONT -e scylla" , timeout = 60 )
35
39
36
40
41
+ @contextlib .contextmanager
42
+ def block_loaders_payload_for_scylla_node (scylla_node : BaseNode , loader_nodes : list [BaseNode ]):
43
+ ports = [9042 , 9142 , 19042 , 19142 ]
44
+ scylla_node .install_package ("iptables" )
45
+ scylla_node .start_service ("iptables" , ignore_status = True )
46
+ loader_nodes_names = [node .name for node in loader_nodes ]
47
+ blocking_ips = [node .ip_address for node in loader_nodes ]
48
+ scylla_node .log .debug ("Block connections on %s from loader nodes %s" , scylla_node .name , loader_nodes_names )
49
+ for port in ports :
50
+ scylla_node .remoter .sudo (
51
+ f"iptables -A INPUT -s { ',' .join (blocking_ips )} -p tcp --dport { port } -j DROP" , ignore_status = True )
52
+ scylla_node .remoter .sudo (
53
+ f"ip6tables -A INPUT -s { ',' .join (blocking_ips )} -p tcp --dport { port } -j DROP" , ignore_status = True )
54
+ yield
55
+ # if scylla_node is alive, then delete the iptables rules
56
+ if scylla_node .remoter .is_up ():
57
+ for port in ports :
58
+ scylla_node .remoter .sudo (
59
+ f"iptables -D INPUT -s { ',' .join (blocking_ips )} -p tcp --dport { port } -j DROP" , ignore_status = True )
60
+ scylla_node .remoter .sudo (
61
+ f"ip6tables -D INPUT -s { ',' .join (blocking_ips )} -p tcp --dport { port } -j DROP" , ignore_status = True )
62
+ scylla_node .stop_service ("iptables" , ignore_status = True )
63
+
64
+
37
65
def is_node_removed_from_cluster (removed_node : BaseNode , verification_node : BaseNode ) -> bool :
38
66
LOGGER .debug ("Verification node %s" , verification_node .name )
39
67
cluster_status : Optional [dict ] = removed_node .parent_cluster .get_nodetool_status (
@@ -48,4 +76,6 @@ def is_node_removed_from_cluster(removed_node: BaseNode, verification_node: Base
48
76
49
77
def is_node_seen_as_down (down_node : BaseNode , verification_node : BaseNode ) -> bool :
50
78
LOGGER .debug ("Verification node %s" , verification_node .name )
51
- return down_node not in verification_node .parent_cluster .get_nodes_up_and_normal (verification_node )
79
+ nodes_status = verification_node .parent_cluster .get_nodetool_status (verification_node , dc_aware = False )
80
+ down_node_status = nodes_status .get (down_node .ip_address )
81
+ return (not down_node_status or down_node_status ["state" ] == "DN" )
0 commit comments