2 ############################
3 # main event script for ctdb
5 # This script is called with one of the following sets of arguments
6 # startup : called when ctdb starts
7 # shutdown : called when ctdb shuts down
8 # takeip : called when an IP address is taken over
9 # releaseip : called when an IP address is released
10 # recovered : called when ctdb has finished a recovery event
12 . $CTDB_BASE/functions
15 update_config_from_tdb() {
16 # Pull optional ctdb configuration data out of config.tdb
17 PUBLICADDRESSESKEY='public-addresses:node#'`ctdb -t 1 xpnn|sed -e "s/.*://"`
18 rm -f $CTDB_VARDIR/state/public_addresses
19 ctdb pfetch config.tdb $PUBLICADDRESSESKEY $CTDB_VARDIR/state/public_addresses 2>/dev/null
20 [ "$?" = "0" ] && [ `stat --format="%s" /etc/ctdb/state/public_addresses` != "0" ] && [ ! -z "$CTDB_PUBLIC_ADDRESSES" ] && {
21 diff $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES >/dev/null 2>/dev/null
23 echo CTDB public address configuration had been updated.
24 echo Extracting new configuration from database.
25 diff $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES
26 cp $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES
28 service ctdb restart &
35 # make sure we have a blank state directory for the scripts to work with
36 /bin/rm -rf $CTDB_VARDIR/state
37 /bin/mkdir -p $CTDB_VARDIR/state || {
39 echo "/bin/mkdir -p $CTDB_VARDIR/state - failed - $ret"
45 # set any tunables from the config file
46 set | grep ^CTDB_SET_ | cut -d_ -f3- |
48 varname=`echo $v | cut -d= -f1`
49 value=`echo $v | cut -d= -f2`
50 ctdb setvar $varname $value || exit 1
51 echo "Set $varname to $value"
56 update_config_from_tdb &
59 # We should never enter swap, so SwapTotal == SwapFree.
60 [ "$CTDB_CHECK_SWAP_IS_NOT_USED" = "yes" ] && {
61 if [ -n "`grep '^Swap\(Total\|Free\)' /proc/meminfo | uniq -s 10 -u`" ]; then
68 # warn when we get low on memory
69 [ -z "$CTDB_MONITOR_FREE_MEMORY_WARN" ] || {
70 FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do /bin/echo -n $D ; done`
71 [ `expr "$FREE_MEM" "<" "$CTDB_MONITOR_FREE_MEMORY_WARN"` != "0" ] && {
72 echo "Running low on memory. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY_WARN"
76 # monitor that we are not running out of memory
77 [ -z "$CTDB_MONITOR_FREE_MEMORY" ] || {
78 FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do /bin/echo -n $D ; done`
79 [ `expr "$FREE_MEM" "<" "$CTDB_MONITOR_FREE_MEMORY"` != "0" ] && {
80 echo "OOM. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY"
83 echo m > /proc/sysrq-trigger
92 ctdb_standard_event_handler "$@"