summaryrefslogtreecommitdiffstats
path: root/ctdb/tests/INTEGRATION/database/basics.002.attach.sh
blob: 6a5c812f35a9f9ccb248deb6706e60258d475e71 (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
#!/usr/bin/env bash

# Verify that databases are attached a node joins the cluster:
# 1. Shut down CTDB on one node
# 2. Attach test databases
# 3. Check that databases are attached on all up nodes
# 4. Start CTDB on the node where it is shut down
# 5. Verify that the test databases are attached on this node
# 6. Restart one of the nodes
# 7. Verify that the test databases are attached on this node

. "${TEST_SCRIPTS_DIR}/integration.bash"

set -e

ctdb_test_init

######################################################################

try_command_on_node 0 "$CTDB listnodes -X | wc -l"
numnodes="$out"
lastnode=$(( numnodes - 1 ))

######################################################################

# Confirm that the database is attached with appropriate flags
check_db_once ()
{
	local pnn="$1"
	local db="$2"

	try_command_on_node "$pnn" $CTDB getdbmap
	if grep -qF "name:${db}" "$outfile" >/dev/null ; then
		return 0
	else
		return 1
	fi
}

check_db ()
{
	local pnn="$1"
	local db="$2"
	local flag="$3"

	local flags

	echo "Waiting until database ${db} is attached on node ${pnn}"
	wait_until 10 check_db_once "$pnn" "$db"

	flags=$(awk -v db="$db" '$2 == "name:" db {print $4}' "$outfile")
	if [ "$flags" = "$flag" ]; then
		echo "GOOD: db ${db} attached on node ${pnn} with flag $flag"
	else
		echo "BAD: db ${db} attached on node ${pnn} with wrong flag"
		cat "$outfile"
		exit 1
	fi
}

######################################################################

testdb1="test_volatile.tdb"
testdb2="test_persistent.tdb"
testdb3="test_replicated.tdb"

test_node="0"

echo "Shutting down node $test_node"
ctdb_nodes_stop "$test_node"
sleep 1
wait_until_node_has_status 1 recovered
try_command_on_node -v 1 $CTDB status

echo "Create test databases"
try_command_on_node 1 $CTDB attach "$testdb1"
try_command_on_node 1 $CTDB attach "$testdb2" persistent
try_command_on_node 1 $CTDB attach "$testdb3" replicated

echo
echo "Checking if database is attached with correct flags"
for node in $(seq 0 $lastnode) ; do
    if [ $node -ne $test_node ] ; then
	check_db $node $testdb1 ""
	check_db $node $testdb2 PERSISTENT
	check_db $node $testdb3 REPLICATED
    fi
done

######################################################################

echo
echo "Start node $test_node"
ctdb_nodes_start "$test_node"
sleep 1
wait_until_ready

echo
echo "Checking if database is attached with correct flags"
check_db $test_node $testdb1 ""
check_db $test_node $testdb2 PERSISTENT
check_db $test_node $testdb3 REPLICATED

######################################################################

echo
echo "Restarting node $test_node"
ctdb_nodes_restart "$test_node"
sleep 1
wait_until_ready

echo
echo "Checking if database is attached with correct flags"
check_db $test_node $testdb1 ""
check_db $test_node $testdb2 PERSISTENT
check_db $test_node $testdb3 REPLICATED