From: Martin Schwenke Date: Wed, 10 Apr 2024 06:55:01 +0000 (+1000) Subject: ctdb-tests: Add persistent TDB backup tests X-Git-Tag: tdb-1.4.13~1243 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=574f2c3ed8dde01610ad9a36d57cc30d6d0008ed;p=thirdparty%2Fsamba.git ctdb-tests: Add persistent TDB backup tests Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs Autobuild-User(master): Martin Schwenke Autobuild-Date(master): Fri Aug 30 00:08:41 UTC 2024 on atb-devel-224 --- diff --git a/ctdb/tests/UNIT/eventscripts/95.database.monitor.001.sh b/ctdb/tests/UNIT/eventscripts/95.database.monitor.001.sh new file mode 100755 index 00000000000..c2de3e09331 --- /dev/null +++ b/ctdb/tests/UNIT/eventscripts/95.database.monitor.001.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "No backup directory set, does nothing" + +setup + +ok_null +simple_test diff --git a/ctdb/tests/UNIT/eventscripts/95.database.monitor.002.sh b/ctdb/tests/UNIT/eventscripts/95.database.monitor.002.sh new file mode 100755 index 00000000000..4ab9a2396f5 --- /dev/null +++ b/ctdb/tests/UNIT/eventscripts/95.database.monitor.002.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "Backup directory set, no persistent databases attached" + +setup + +backup_dir="${CTDB_TEST_TMP_DIR}/backup" +mkdir "$backup_dir" + +setup_date "20240101010101" + +ctdb attach foo_volatile.tdb + +setup_script_options < 1 {print $2}' | xargs diff --git a/ctdb/tests/UNIT/eventscripts/stubs/ctdb b/ctdb/tests/UNIT/eventscripts/stubs/ctdb index 2106e25673a..eb823fda469 100755 --- a/ctdb/tests/UNIT/eventscripts/stubs/ctdb +++ b/ctdb/tests/UNIT/eventscripts/stubs/ctdb @@ -141,6 +141,12 @@ ctdb_pnn() echo "${FAKE_CTDB_PNN:-0}" } +ctdb_leader() +{ + # Defaults to 0 + echo "${FAKE_CTDB_LEADER:-${FAKE_CTDB_PNN:-0}}" +} + ###################################################################### FAKE_CTDB_NODE_STATE="$FAKE_CTDB_STATE/node-state" @@ -311,9 +317,29 @@ ctdb_nodestatus() ###################################################################### +_fake_db_prefix_dir="${CTDB_TEST_TMP_DIR}/fake-ctdb/fake-tdb" _t_setup() { - _t_dir="${CTDB_TEST_TMP_DIR}/fake-ctdb/fake-tdb/$1" + _db="$1" + _type="${2:-volatile}" + + case "$2" in + persistent) + _t_dir="${_fake_db_prefix_dir}/persistent/$1" + ;; + auto) + _t_dir="${_fake_db_prefix_dir}/persistent/$1" + if [ ! -d "$_t_dir" ]; then + _t_dir="${_fake_db_prefix_dir}/volatile/$1" + if [ ! -d "$_t_dir" ]; then + die 'Unknown database for "auto"' + fi + fi + ;; + *) + _t_dir="${_fake_db_prefix_dir}/volatile/$1" + esac + mkdir -p "$_t_dir" } @@ -334,30 +360,30 @@ _t_del() ctdb_attach() { - _t_setup "$1" + _t_setup "$1" "$2" } ctdb_pstore() { - _t_setup "$1" + _t_setup "$1" "persistent" _t_put "$2" "$3" } ctdb_pdelete() { - _t_setup "$1" + _t_setup "$1" "persistent" _t_del "$2" } ctdb_pfetch() { - _t_setup "$1" + _t_setup "$1" "persistent" _t_get "$2" >"$3" 2>/dev/null } ctdb_ptrans() { - _t_setup "$1" + _t_setup "$1" "persistent" while IFS="" read -r _line; do _k=$(echo "$_line" | sed -n -e 's@^"\([^"]*\)" "[^"]*"$@\1@p') @@ -371,9 +397,49 @@ ctdb_ptrans() done } +getdbmap_1() +{ + _path="$1" + _persistent="${2:-0}" + + _mypnn=$(ctdb_pnn) + _tpath="${_path}.${_mypnn}" + + _name=$(basename "$_path") + _id=$(echo "${_name}:${_path}" | + od -A n -t x4 | + tr '[:lower:]' '[:upper:]' | + sed -n -e 's| ||g' -e '1s|\(........\).*|0x\1|p') + + echo "|${_id}|${_name}|${_tpath}|${_persistent}|0|0|0|0|" +} + +ctdb_getdbmap() +{ + if ! $machine_readable; then + not_implemented "getdbmap without -X" + fi + + echo '|ID|Name|Path|Persistent|Sticky|Unhealthy|Readonly|Replicated|' + + for i in "${_fake_db_prefix_dir}/volatile/"* ; do + if [ ! -d "$i" ]; then + continue + fi + getdbmap_1 "$i" 0 + done + + for i in "${_fake_db_prefix_dir}/persistent/"* ; do + if [ ! -d "$i" ]; then + continue + fi + getdbmap_1 "$i" 1 + done +} + ctdb_catdb() { - _t_setup "$1" + _t_setup "$1" "auto" # This will break on keys with spaces but we don't have any of # those yet. @@ -397,6 +463,19 @@ EOF echo "Dumped ${_count} records" } +ctdb_backupdb() +{ + _db="$1" + _file="$2" + + if { + echo "Fake backup of ${_db}" + ctdb_catdb "$_db" + }>"$_file"; then + echo "Database backed up to ${_file}" + fi +} + ###################################################################### FAKE_CTDB_IFACES_DOWN="${FAKE_CTDB_STATE}/ifaces-down"