3 # Event script for ctdb-specific setup and other things that don't fit
6 [ -n "$CTDB_BASE" ] || \
7 export CTDB_BASE
=$
(cd -P $
(dirname "$0") ; dirname "$PWD")
12 ctdb_setup_service_state_dir
"ctdb"
14 ############################################################
18 # Find the best TDB consistency check available.
19 use_tdb_tool_check
=false
20 type tdbtool
>/dev
/null
2>&1 && found_tdbtool
=true
21 type tdbdump
>/dev
/null
2>&1 && found_tdbdump
=true
23 if $found_tdbtool && echo "help" | tdbtool |
grep -q check
; then
24 use_tdb_tool_check
=true
25 elif $found_tdbtool && $found_tdbdump ; then
27 WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
28 Using 'tdbdump' for database checks.
29 Consider updating 'tdbtool' for better checks!
31 elif $found_tdbdump ; then
33 WARNING: 'tdbtool' is not available.
34 Using 'tdbdump' to check the databases.
35 Consider installing a recent 'tdbtool' for better checks!
39 WARNING: Cannot check databases since neither
40 'tdbdump' nor 'tdbtool check' is available.
41 Consider installing tdbtool or at least tdbdump!
51 if $use_tdb_tool_check ; then
52 # tdbtool always exits with 0 :-(
53 if timeout
10 tdbtool
"$_db" check
2>/dev
/null |
54 grep -q "Database integrity is OK" ; then
60 timeout
10 tdbdump
"$_db" >/dev
/null
2>/dev
/null
65 check_persistent_databases
()
67 _dir
="${CTDB_DBDIR_PERSISTENT:-${CTDB_DBDIR:-${CTDB_VARDIR}}/persistent}"
68 mkdir
-p "$_dir" 2>/dev
/null
70 [ "${CTDB_MAX_PERSISTENT_CHECK_ERRORS:-0}" = "0" ] ||
return 0
72 for _db
in $
(ls "$_dir/"*.tdb.
*[0-9] 2>/dev
/null
) ; do
74 echo "Persistent database $_db is corrupted! CTDB will not start."
80 check_non_persistent_databases
()
82 _dir
="${CTDB_DBDIR:-${CTDB_VARDIR}}"
83 mkdir
-p "$_dir" 2>/dev
/null
85 for _db
in $
(ls "${_dir}/"*.tdb.
*[0-9] 2>/dev
/null
) ; do
87 _backup
="${_db}.$(date +'%Y%m%d.%H%M%S.%N').corrupt"
89 WARNING: database ${_db} is corrupted.
90 Moving to backup ${_backup} for later analysis.
94 # Now remove excess backups
95 ls -td "${_db}."*".corrupt" |
96 tail -n +$
((${CTDB_MAX_CORRUPT_DB_BACKUPS:-10} + 1)) |
103 set_ctdb_variables
()
105 # set any tunables from the config file
106 set |
sed -n '/^CTDB_SET_/s/=.*//p' |
108 varname
="${v#CTDB_SET_}"
109 value
=$
(eval echo "\$$v")
110 if ctdb setvar
$varname $value ; then
111 echo "Set $varname to $value"
113 echo "Invalid configuration: CTDB_SET_${varname}=${value}"
119 monitor_system_memory
()
121 # If monitoring free memory then calculate how much there is
122 if [ -n "$CTDB_MONITOR_FREE_MEMORY_WARN" -o \
123 -n "$CTDB_MONITOR_FREE_MEMORY" ] ; then
124 free_mem
=$
(free
-m |
awk '$2 == "buffers/cache:" { print $4 }')
127 # Shutdown CTDB when memory is below the configured limit
128 if [ -n "$CTDB_MONITOR_FREE_MEMORY" ] ; then
129 if [ $free_mem -le $CTDB_MONITOR_FREE_MEMORY ] ; then
130 echo "CRITICAL: OOM - ${free_mem}MB free <= ${CTDB_MONITOR_FREE_MEMORY}MB (CTDB threshold)"
131 echo "CRITICAL: Shutting down CTDB!!!"
134 set_proc
"sysrq-trigger" "m"
141 # Warn when low on memory
142 if [ -n "$CTDB_MONITOR_FREE_MEMORY_WARN" ] ; then
143 if [ $free_mem -le $CTDB_MONITOR_FREE_MEMORY_WARN ] ; then
144 echo "WARNING: free memory is low - ${free_mem}MB free <= ${CTDB_MONITOR_FREE_MEMORY_WARN}MB (CTDB threshold)"
148 # We should never enter swap, so SwapTotal == SwapFree.
149 if [ "$CTDB_CHECK_SWAP_IS_NOT_USED" = "yes" ] ; then
150 set -- $
(get_proc
"meminfo" |
awk '$1 ~ /Swap(Total|Free):/ { print $2 }')
151 if [ "$1" != "$2" ] ; then
152 echo We are swapping
:
159 ############################################################
165 # make sure we have a blank state directory for the scripts to work with
166 rm -rf $CTDB_VARDIR/state
167 # Look at the pattern - this should not be -rf!!!
168 rm -f $ctdb_managed_dir/*
169 mkdir
-p $CTDB_VARDIR/state ||
{
171 echo "mkdir -p $CTDB_VARDIR/state - failed - $ret"
175 if select_tdb_checker
; then
176 check_persistent_databases ||
exit $?
177 check_non_persistent_databases
182 # Set any tunables from the config file
183 set_ctdb_variables || \
184 die
"Aborting setup due to invalid configuration - fix typos, remove unknown tunables"
188 ctdb attach ctdb.tdb persistent
191 monitor_system_memory
195 ctdb_standard_event_handler
"$@"