blob: d16482e2e63e3aad087b2cd30bab644a799718eb (
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
|
#!/usr/bin/env bash
# Confirm that a record is vacuumed if it is locked on the deleting
# node when the 2nd fast vacuuming run occurs, but vacuuming is
# delayed until the lock is released
. "${TEST_SCRIPTS_DIR}/integration.bash"
set -e
ctdb_test_init
db="vacuum_test.tdb"
key="key"
echo "Stall vacuuming on all nodes"
ctdb_onnode -p all "setvar VacuumInterval 99999"
echo
echo "Getting list of nodes..."
ctdb_get_all_pnns
# all_pnns is set above by ctdb_get_all_pnns()
# shellcheck disable=SC2154
first=$(echo "$all_pnns" | sed -n -e '1p')
echo
echo "Determine lmaster node for key"
testprog_onnode "$first" "ctdb-db-test get-lmaster key"
# $out is set above by testprog_onnode()
# shellcheck disable=SC2154
lmaster="$out"
echo "lmaster=${lmaster}"
non_lmaster=""
# Find a non-lmaster node
for i in $all_pnns ; do
if [ "$i" != "$lmaster" ] ; then
non_lmaster="$i"
break
fi
done
if [ -z "$non_lmaster" ] ; then
ctdb_test_fail "Could not find non-lmaster node for key"
fi
echo "............................................................"
echo "Delete key ${key} on node ${non_lmaster}"
echo "Lock on non-lmaster node ${non_lmaster} during 2nd vacuuming run"
echo "............................................................"
echo
echo "Create/wipe test database ${db}"
ctdb_onnode "$first" "attach ${db}"
ctdb_onnode "$first" "wipedb ${db}"
echo "Create a record in ${db}"
ctdb_onnode "$first" "writekey ${db} ${key} value1"
echo "Migrate record to all nodes"
ctdb_onnode all "readkey ${db} ${key}"
echo "Confirm that all nodes have the record"
check_cattdb_num_records "$db" 1 "$all_pnns"
echo
echo "Delete key \"${key}\" from node ${non_lmaster}"
ctdb_onnode "$non_lmaster" "deletekey $db ${key}"
echo
echo "Do a fast vacuuming run on node ${non_lmaster}"
testprog_onnode "$non_lmaster" "ctdb-db-test vacuum ${db}"
echo
echo "Confirm that all nodes still have the record"
check_cattdb_num_records "$db" 1 "$all_pnns"
echo
echo "Lock record on non-lmaster node ${non_lmaster}"
testprog_onnode "$non_lmaster" "ctdb-db-test local-lock ${db} ${key}"
pid="${out#OK }"
ctdb_test_cleanup_pid_set "$non_lmaster" "$pid"
echo
echo "Do a fast vacuuming run on lmaster node ${lmaster} - THIS WILL FAIL"
status=0
testprog_onnode "$lmaster" "ctdb-db-test -t 10 vacuum ${db}" || status=$?
if [ $status -ne 110 ] ; then
ctdb_test_fail "$out"
fi
echo "Confirm record key=\"${key}\" has dmaster=${non_lmaster}"
vacuum_test_key_dmaster "$lmaster" "$db" "$key" "$non_lmaster"
echo "Kill lock process ${pid} on node ${non_lmaster}"
try_command_on_node "$non_lmaster" "kill ${pid}"
ctdb_test_cleanup_pid_clear
echo "Wait until record is migrated to lmaster node ${lmaster}"
vacuum_test_wait_key_dmaster "$lmaster" "$db" "$key"
echo
echo "Confirm that all nodes still have the record"
check_cattdb_num_records "$db" 1 "$all_pnns"
echo "Do a fast vacuuming run on node ${lmaster}"
testprog_onnode "$lmaster" "ctdb-db-test vacuum ${db}"
echo
echo "Confirm that the record is gone from all nodes"
check_cattdb_num_records "$db" 0 "$all_pnns"
|