Redirect the output from 00.ctdb pfetch to stdout.
[metze/ctdb/wip.git] / config / events.d / 00.ctdb
index ed8f9f212650ef3e575fd2fb183f77acdef01bcd..61f2031094932104faddd207efa8a4b929e5edd8 100755 (executable)
 . $CTDB_BASE/functions
 loadconfig
 
+update_config_from_tdb() {
+       # Pull optional ctdb configuration data out of config.tdb
+       PUBLICADDRESSESKEY='public-addresses:node#'`ctdb -t 1 xpnn|sed -e "s/.*://"`
+       rm -f $CTDB_VARDIR/state/public_addresses
+       ctdb pfetch config.tdb $PUBLICADDRESSESKEY $CTDB_VARDIR/state/public_addresses 2>/dev/null
+       [ "$?" = "0" ] && [ `stat --format="%s" /etc/ctdb/state/public_addresses` != "0" ] && [ ! -z "$CTDB_PUBLIC_ADDRESSES" ] && {
+               diff $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES >/dev/null 2>/dev/null
+               [ $? = "0" ] || {
+                       echo CTDB public address configuration had been updated.
+                       echo Extracting new configuration from database.
+                       diff $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES
+                       cp $CTDB_VARDIR/state/public_addresses $CTDB_PUBLIC_ADDRESSES
+                       echo Restarting CTDB
+                       service ctdb restart &
+               }
+       }
+}
+
 case "$1" in 
      init)
         # make sure we have a blank state directory for the scripts to work with
-       /bin/rm -rf $CTDB_BASE/state
-       /bin/mkdir -p $CTDB_BASE/state
+       /bin/rm -rf $CTDB_VARDIR/state
+       /bin/mkdir -p $CTDB_VARDIR/state || {
+           ret=$?
+           echo "/bin/mkdir -p $CTDB_VARDIR/state - failed - $ret"
+           exit $ret
+       }
+       ;;
 
+     setup)
        # set any tunables from the config file
        set | grep ^CTDB_SET_ | cut -d_ -f3- | 
        while read v; do
@@ -28,13 +52,26 @@ case "$1" in
        done || exit 1
        ;;
 
+    startup)
+       update_config_from_tdb &
+       ;;
     monitor)
        # We should never enter swap, so SwapTotal == SwapFree.
-       if [ -n "`grep '^Swap\(Total\|Free\)' /proc/meminfo | uniq -s 10 -u`" ]; then
-           echo We are swapping:
-           cat /proc/meminfo
-           ps auxfww
-       fi
+       [ "$CTDB_CHECK_SWAP_IS_NOT_USED" = "yes" ] && {
+           if [ -n "`grep '^Swap\(Total\|Free\)' /proc/meminfo | uniq -s 10 -u`" ]; then
+               echo We are swapping:
+               cat /proc/meminfo
+               ps auxfww
+           fi
+       }
+
+       # warn when we get low on memory
+       [ -z "$CTDB_MONITOR_FREE_MEMORY_WARN" ] || {
+               FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do /bin/echo -n $D ; done`
+               [ `expr "$FREE_MEM" "<" "$CTDB_MONITOR_FREE_MEMORY_WARN"` != "0" ] && {
+                       echo "Running low on memory. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY_WARN"
+               }
+       }
 
        # monitor that we are not running out of memory
        [ -z "$CTDB_MONITOR_FREE_MEMORY" ] || {