blob: 88e450227b4096f38c0dd837d2bf3cdaf7afb0de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#!/bin/bash
test_info()
{
cat <<EOF
Verify that the reconvery daemon handles unhosted IPs properly.
EOF
}
. "${TEST_SCRIPTS_DIR}/integration.bash"
ctdb_test_init "$@"
set -e
cluster_is_healthy
# Reset configuration
ctdb_restart_when_done
select_test_node_and_ips
echo "Running test against node $test_node and IP $test_ip"
# Find the interface
try_command_on_node $test_node "$CTDB ip -v -Y | awk -F: -v ip=$test_ip '\$2 == ip { print \$4 }'"
iface="$out"
if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
# Find the netmask
try_command_on_node $test_node ip addr show to $test_ip
mask="${out##*/}"
mask="${mask%% *}"
else
mask="24"
fi
echo "$test_ip/$mask is on $iface"
echo "Deleting IP $test_ip from all nodes"
try_command_on_node -v $test_node $CTDB delip -n all $test_ip
wait_until_ips_are_on_nodeglob '!' $test_node $test_ip
try_command_on_node -v all $CTDB ip
my_exit_hook ()
{
if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
onnode -q all $CTDB enablescript "10.interface"
fi
}
ctdb_test_exit_hook_add my_exit_hook
# This forces us to wait until the ipreallocated associated with the
# delips is complete.
try_command_on_node $test_node $CTDB sync
# Wait for a monitor event. Then the next steps are unlikely to occur
# in the middle of a monitor event and will have the expected effect.
wait_for_monitor_event $test_node
if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
# Stop monitor events from bringing up the link status of an interface
try_command_on_node $test_node $CTDB disablescript 10.interface
fi
echo "Marking interface $iface down on node $test_node"
try_command_on_node $test_node $CTDB setifacelink $iface down
try_command_on_node $test_node $CTDB clearlog recoverd
echo "Adding IP $test_ip to node $test_node"
try_command_on_node $test_node $CTDB addip $test_ip/$mask $iface
# Give the recovery daemon enough time to start doing IP verification
sleep_for 15
try_command_on_node $test_node $CTDB getlog recoverd
msg="Public IP '$test_ip' is not assigned and we could serve it"
if grep "$msg" <<<"$out" ; then
echo "BAD: the recovery daemon noticed that the IP was unhosted"
exit 1
else
echo "GOOD: the recovery daemon did not notice that the IP was unhosted"
fi
try_command_on_node $test_node $CTDB clearlog recoverd
echo "Marking interface $iface up on node $test_node"
try_command_on_node $test_node $CTDB setifacelink $iface up
wait_until_ips_are_on_nodeglob $test_node $test_ip
try_command_on_node -v $test_node $CTDB getlog recoverd
if grep "$msg" <<<"$out" ; then
echo "GOOD: the recovery daemon noticed that the IP was unhosted"
else
echo "BAD: the recovery daemon did not notice that the IP was unhosted"
exit 1
fi
|