1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-06 13:18:07 +03:00
samba-mirror/ctdb/tests/INTEGRATION/database/vacuum.034.locked.sh
Martin Schwenke 8b24cae630 ctdb-tests: Update preamble for INTEGRATION tests
* Use "#!/usr/bin/env bash" for improved portability

* Drop test_info() definition and replace it with a comment

  The use of test_info() is pointless.

* Drop call to cluster_is_healthy()

  This is a holdover from when the previous test would restart daemons
  to get things ready for a test.  There was also a bug where going
  into recovery during the restart would sometimes cause the cluster
  to become unhealthy.  If we really need something like this then we
  can add it to ctdb_test_init().

* Make order of preamble consistent

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
2020-07-22 07:53:35 +00:00

130 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Confirm that a record is not vacuumed if it is locked on another
# (non-lmaster, non-deleting) node when the 3rd fast vacuuming run
# occurs, but is dropped from the lmaster delete tree
. "${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
another_node=""
# Find another node
for i in $all_pnns ; do
if [ "$i" != "$lmaster" ] && [ "$i" != "$non_lmaster" ] ; then
another_node="$i"
break
fi
done
if [ -z "$another_node" ] ; then
ctdb_test_fail "Could not find another non-lmaster node for key"
fi
echo "............................................................"
echo "Delete key ${key} on node ${non_lmaster}"
echo "Lock on non-lmaster node ${non_lmaster} during 3rd 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 "Do a fast vacuuming run on lmaster node ${lmaster}"
testprog_onnode "$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 ${another_node}"
testprog_onnode "$another_node" "ctdb-db-test local-lock ${db} ${key}"
pid="${out#OK }"
ctdb_test_cleanup_pid_set "$another_node" "$pid"
echo "Do a fast vacuuming run on node ${lmaster}"
testprog_onnode "$lmaster" "ctdb-db-test vacuum ${db}"
echo "Kill lock process ${pid} on node ${another_node}"
try_command_on_node "$another_node" "kill ${pid}"
ctdb_test_cleanup_pid_clear
echo
echo "Confirm that nodes ${lmaster} and ${another_node} still have the record"
check_cattdb_num_records "$db" 1 "${lmaster} ${another_node}"
vacuum_confirm_key_empty_dmaster "$lmaster" "$db" "$key"
echo
# Record has been dropped from the delete list so this will not pick it up
echo "Do a fast vacuuming run on lmaster node ${lmaster}"
testprog_onnode "$lmaster" "ctdb-db-test vacuum ${db}"
echo
echo "Confirm that nodes ${lmaster} and ${another_node} still have the record"
check_cattdb_num_records "$db" 1 "${lmaster} ${another_node}"
vacuum_confirm_key_empty_dmaster "$lmaster" "$db" "$key"