#!/bin/sh # Event script for ctdb-specific setup and other things that don't fit # elsewhere. [ -n "$CTDB_BASE" ] || \ CTDB_BASE=$(d=$(dirname "$0") ; cd -P "$d" ; dirname "$PWD") . "${CTDB_BASE}/functions" loadconfig ############################################################ # type is commonly supported and more portable than which(1) # shellcheck disable=SC2039 select_tdb_checker () { # Find the best TDB consistency check available. use_tdb_tool_check=false type tdbtool >/dev/null 2>&1 && found_tdbtool=true type tdbdump >/dev/null 2>&1 && found_tdbdump=true if $found_tdbtool && echo "help" | tdbtool | grep -q check ; then use_tdb_tool_check=true elif $found_tdbtool && $found_tdbdump ; then cat </dev/null | grep -q "Database integrity is OK" ; then return 0 else return 1 fi else timeout 10 tdbdump "$_db" >/dev/null 2>/dev/null return $? fi } check_persistent_databases () { _dir="${CTDB_DBDIR_PERSISTENT:-${CTDB_DBDIR:-${CTDB_VARDIR}}/persistent}" [ -d "$_dir" ] || return 0 [ "${CTDB_MAX_PERSISTENT_CHECK_ERRORS:-0}" = "0" ] || return 0 for _db in "$_dir/"*.tdb.*[0-9] ; do [ -r "$_db" ] || continue check_tdb "$_db" || \ die "Persistent database $_db is corrupted! CTDB will not start." done } check_non_persistent_databases () { _dir="${CTDB_DBDIR:-${CTDB_VARDIR}}" [ -d "$_dir" ] || return 0 for _db in "${_dir}/"*.tdb.*[0-9] ; do [ -r "$_db" ] || continue check_tdb "$_db" || { _backup="${_db}.$(date +'%Y%m%d.%H%M%S.%N').corrupt" cat <