summaryrefslogtreecommitdiff
path: root/ctdb/tests/INTEGRATION/database/recovery.003.no_resurrect.sh
blob: 51d806a5d47236cdfa22bcf638761d031ec953c0 (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
#!/bin/bash

test_info()
{
    cat <<EOF
Ensure recovery doesn't resurrect deleted records from recently inactive nodes
EOF
}

. "${TEST_SCRIPTS_DIR}/integration.bash"

ctdb_test_init

set -e

cluster_is_healthy

testdb="rec_test.tdb"

echo "Getting list of nodes..."
ctdb_get_all_pnns

first=$(echo "$all_pnns" | sed -n -e '1p')
second=$(echo "$all_pnns" | sed -n -e '2p')
notfirst=$(echo "$all_pnns" | tail -n +2)

echo "Create/wipe test database ${testdb}"
try_command_on_node $first $CTDB attach "$testdb"
try_command_on_node $first $CTDB wipedb "$testdb"

echo "store key(test1) data(value1)"
try_command_on_node $first $CTDB writekey "$testdb" test1 value1

echo "Migrate key(test1) to all nodes"
try_command_on_node all $CTDB readkey "$testdb" test1

echo "Stop node ${first}"
try_command_on_node $first $CTDB stop
wait_until_node_has_status $first stopped

echo "Delete key(test1)"
try_command_on_node $second $CTDB deletekey "$testdb" test1

database_has_zero_records ()
{
	local n
	for n in $notfirst ; do
		local num_records
		num_records=$(db_ctdb_cattdb_count_records "$n" "$testdb")
		if [ "$num_records" != 0 ] ; then
			return 1
		fi
	done

	return 0
}

echo "Trigger a recovery"
try_command_on_node "$second" $CTDB recover

echo "Checking that database has 0 records"
database_has_zero_records

echo "Continue node ${first}"
try_command_on_node $first $CTDB continue
wait_until_node_has_status $first notstopped

echo "Get database contents"
try_command_on_node -v $first $CTDB catdb "$testdb"

if grep -q '^key(' "$outfile" ; then
	echo "BAD: Deleted record has been resurrected"
	exit 1
fi

echo "GOOD: Deleted record is still gone"