summaryrefslogtreecommitdiffstats
path: root/ctdb/tests/INTEGRATION/database/recovery.003.no_resurrect.sh
blob: b314d4d86ebaa9993cd6d23a9a86c0b7b0fced0d (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
#!/usr/bin/env bash

# Ensure recovery doesn't resurrect deleted records from recently
# inactive nodes

. "${TEST_SCRIPTS_DIR}/integration.bash"

set -e

ctdb_test_init

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 ()
{
	# shellcheck disable=SC2086
	# $notfirst can be multi-word
	check_cattdb_num_records "$testdb" 0 "$notfirst"
}

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"