1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/ctdb/tests/INTEGRATION/database/vacuum.003.recreate.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

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