Redirect the output from 00.ctdb pfetch to stdout.
[metze/ctdb/wip.git] / config / events.d / 00.ctdb
1 #!/bin/sh
2 ############################
3 # main event script for ctdb
4 #
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
11
12 . $CTDB_BASE/functions
13 loadconfig
14
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
22                 [ $? = "0" ] || {
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
27                         echo Restarting CTDB
28                         service ctdb restart &
29                 }
30         }
31 }
32
33 case "$1" in 
34      init)
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 || {
38             ret=$?
39             echo "/bin/mkdir -p $CTDB_VARDIR/state - failed - $ret"
40             exit $ret
41         }
42         ;;
43
44      setup)
45         # set any tunables from the config file
46         set | grep ^CTDB_SET_ | cut -d_ -f3- | 
47         while read v; do
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"
52         done || exit 1
53         ;;
54
55     startup)
56         update_config_from_tdb &
57         ;;
58     monitor)
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
62                 echo We are swapping:
63                 cat /proc/meminfo
64                 ps auxfww
65             fi
66         }
67
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"
73                 }
74         }
75
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"
81                         cat /proc/meminfo
82                         ps auxfww
83                         echo m > /proc/sysrq-trigger
84                         ctdb disable
85                         sleep 3
86                         ctdb shutdown
87                 }
88         }
89         ;;
90
91     *)
92         ctdb_standard_event_handler "$@"
93         ;;
94 esac
95
96 # all OK
97 exit 0