summaryrefslogtreecommitdiff
path: root/ctdb/tests/INTEGRATION/failover/pubips.012.reloadips.sh
blob: 451fca3a86646ee5c5486cf39637b45db9284c68 (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash

test_info()
{
    cat <<EOF
Verify that IPs can be rearrranged using 'ctdb reloadips'.

Various sub-tests that remove addresses from the public_addresses file
on a node or delete the entire contents of the public_addresses file.

Prerequisites:

* An active CTDB cluster with at least 2 active nodes.

Expected results:

* When addresses are deconfigured "ctdb ip" no longer reports them and
  when added they are seen again.
EOF
}

. "${TEST_SCRIPTS_DIR}/integration.bash"

ctdb_test_init

set -e

cluster_is_healthy

select_test_node_and_ips

try_command_on_node $test_node $CTDB_TEST_WRAPPER ctdb_base_show
addresses="${out}/public_addresses"
echo "Public addresses file on node $test_node is \"$addresses\""
backup="${addresses}.$$"

restore_public_addresses ()
{
    try_command_on_node $test_node "mv $backup $addresses >/dev/null 2>&1 || true"
}
ctdb_test_exit_hook_add restore_public_addresses

# ctdb reloadips will fail if it can't disable takover runs.  The most
# likely reason for this is that there is already a takeover run in
# progress.  We can't predict when this will happen, so retry if this
# occurs.
do_ctdb_reloadips ()
{
	local retry_max=10
	local retry_count=0
	while : ; do
		if try_command_on_node any "$CTDB reloadips all" ; then
			return 0
		fi

		if [ "$out" != "Failed to disable takeover runs" ] ; then
			return 1
		fi

		if [ $retry_count -ge $retry_max ] ; then
			return 1
		fi

		retry_count=$((retry_count + 1))
		echo "Retrying..."
		sleep_for 1
	done
}


echo "Removing IP $test_ip from node $test_node"

try_command_on_node $test_node "mv $addresses $backup && grep -v '^${test_ip}/' $backup >$addresses"

do_ctdb_reloadips

try_command_on_node $test_node $CTDB ip

if grep "^${test_ip} " <<<"$out" ; then
    cat <<EOF
BAD: node $test_node can still host IP $test_ip:
$out
EOF
    exit 1
fi

cat <<EOF
GOOD: node $test_node is no longer hosting IP $test_ip:
$out
EOF

try_command_on_node any $CTDB sync


echo "Restoring addresses"
restore_public_addresses

do_ctdb_reloadips

echo "Getting list of public IPs on node $test_node"
try_command_on_node $test_node "$CTDB ip | tail -n +2"

if [ -z "$out" ] ; then
    echo "BAD: node $test_node has no ips"
    exit 1
fi

cat <<EOF
GOOD: node $test_node has these addresses:
$out
EOF

try_command_on_node any $CTDB sync


echo "Emptying public addresses file on $test_node"

try_command_on_node $test_node "mv $addresses $backup && touch $addresses"

do_ctdb_reloadips

echo "Getting list of public IPs on node $test_node"
try_command_on_node $test_node "$CTDB ip | tail -n +2"

if [ -n "$out" ] ; then
    cat <<EOF
BAD: node $test_node still has ips:
$out
EOF
    exit 1
fi

echo "GOOD: no IPs left on node $test_node"