mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
8b24cae630
* 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>
140 lines
3.7 KiB
Bash
Executable File
140 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Ensure that vacuuming does not delete a record that is recreated
|
|
# before vacuuming completes. This needs at least 3 nodes.
|
|
|
|
. "${TEST_SCRIPTS_DIR}/integration.bash"
|
|
|
|
set -e
|
|
|
|
ctdb_test_init
|
|
|
|
db="vacuum_test.tdb"
|
|
|
|
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 "Create/wipe test database ${db}"
|
|
ctdb_onnode "$first" "attach ${db}"
|
|
ctdb_onnode "$first" "wipedb ${db}"
|
|
|
|
echo
|
|
echo "Create a record in ${db}"
|
|
ctdb_onnode "$first" "writekey ${db} key value1"
|
|
|
|
echo
|
|
echo "Migrate record to all nodes"
|
|
ctdb_onnode all "readkey ${db} key"
|
|
|
|
echo
|
|
echo "Confirm that all nodes have the record"
|
|
check_cattdb_num_records "$db" 1 "$all_pnns"
|
|
|
|
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_non_lmaster=""
|
|
# Find another non-lmaster node
|
|
for i in $all_pnns ; do
|
|
if [ "$i" != "$lmaster" ] && [ "$i" != "$non_lmaster" ] ; then
|
|
another_non_lmaster="$i"
|
|
break
|
|
fi
|
|
done
|
|
if [ -z "$another_non_lmaster" ] ; then
|
|
ctdb_test_fail "Could not find another non-lmaster node for key"
|
|
fi
|
|
|
|
vacuum_test ()
|
|
{
|
|
local db="$1"
|
|
local key="$2"
|
|
local val="$3"
|
|
local dnode="$4"
|
|
local rnode="$5"
|
|
local rrun="$6"
|
|
|
|
echo
|
|
echo '............................................................'
|
|
printf 'Delete key %s on node %d\n' "$key" "$dnode"
|
|
printf 'Recreate on node %d after %d vacuuming run(s)\n' \
|
|
"$rnode" "$rrun"
|
|
echo '............................................................'
|
|
|
|
echo
|
|
echo "Delete key \"${key}\" from node ${dnode}"
|
|
ctdb_onnode "$dnode" "deletekey ${db} ${key}"
|
|
|
|
if [ "$rrun" -eq 0 ] ; then
|
|
echo "Recreate record on node ${rnode}"
|
|
ctdb_onnode "$rnode" "writekey ${db} ${key} ${val}"
|
|
fi
|
|
|
|
echo "Do a fast vacuuming run on node ${dnode}"
|
|
testprog_onnode "$dnode" "ctdb-db-test vacuum ${db}"
|
|
|
|
if [ "$rrun" -eq 1 ] ; then
|
|
echo "Recreate record on node ${rnode}"
|
|
ctdb_onnode "$rnode" "writekey ${db} ${key} ${val}"
|
|
fi
|
|
|
|
echo "Do a fast vacuuming run on lmaster node ${lmaster}"
|
|
testprog_onnode "$lmaster" "ctdb-db-test vacuum ${db}"
|
|
|
|
if [ "$rrun" -eq 2 ] ; then
|
|
echo "Recreate record on node ${rnode}"
|
|
ctdb_onnode "$rnode" "writekey ${db} ${key} ${val}"
|
|
fi
|
|
|
|
echo "Do a fast vacuuming run on lmaster node ${lmaster}"
|
|
testprog_onnode "$lmaster" "ctdb-db-test vacuum ${db}"
|
|
|
|
echo
|
|
echo "Confirm the record still exists on all nodes"
|
|
check_cattdb_num_records "$db" 1 "$all_pnns"
|
|
|
|
echo
|
|
echo "Confirm the record contains correct value"
|
|
db_confirm_key_has_value "$first" "$db" "$key" "$val"
|
|
}
|
|
|
|
vacuum_test "$db" "key" "value01" "$non_lmaster" "$non_lmaster" 0
|
|
vacuum_test "$db" "key" "value02" "$non_lmaster" "$another_non_lmaster" 0
|
|
vacuum_test "$db" "key" "value03" "$non_lmaster" "$lmaster" 0
|
|
vacuum_test "$db" "key" "value04" "$lmaster" "$non_lmaster" 0
|
|
vacuum_test "$db" "key" "value05" "$lmaster" "$lmaster" 0
|
|
|
|
vacuum_test "$db" "key" "value06" "$non_lmaster" "$non_lmaster" 1
|
|
vacuum_test "$db" "key" "value07" "$non_lmaster" "$lmaster" 1
|
|
vacuum_test "$db" "key" "value08" "$non_lmaster" "$another_non_lmaster" 1
|
|
|
|
vacuum_test "$db" "key" "value09" "$non_lmaster" "$non_lmaster" 2
|
|
vacuum_test "$db" "key" "value10" "$non_lmaster" "$lmaster" 2
|
|
vacuum_test "$db" "key" "value11" "$non_lmaster" "$another_non_lmaster" 2
|