Redirect the output from 00.ctdb pfetch to stdout.
[metze/ctdb/wip.git] / config / events.d / 00.ctdb
index a248b4e6784d0cb74fecfb6a758753111edbde35..61f2031094932104faddd207efa8a4b929e5edd8 100755 (executable)
 #     recovered  : called when ctdb has finished a recovery event
 
 . $CTDB_BASE/functions
-loadconfig ctdb
+loadconfig
 
-# ensure we have /bin and /usr/bin in the path
-PATH=/bin:/usr/bin:$PATH
-
-cmd="$1"
-shift
-
-# set default samba cleanup period - in minutes
-[ -z "$CTDB_VACUUM_PERIOD" ] && {
-    CTDB_VACUUM_PERIOD=5
-}
-
-###########################
-# periodic vacuum function
-periodic_vacuum() {
-    # this cleans up dead records and repacks the databases
-    ( time ctdb vacuum 200000 -T 30; time ctdb repack -T 30 ) > $CTDB_BASE/state/vacuum.log 2>&1 &
+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 $cmd in 
-     startup)
+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
@@ -46,16 +52,25 @@ case $cmd in
        done || exit 1
        ;;
 
+    startup)
+       update_config_from_tdb &
+       ;;
     monitor)
-       # Create a dummy file to track when we need to do periodic cleanup
-       # of samba databases
-       [ -f $CTDB_BASE/state/periodic_vacuum ] || {
-               touch $CTDB_BASE/state/periodic_vacuum
+       # We should never enter swap, so SwapTotal == SwapFree.
+       [ "$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
        }
-       [ `/usr/bin/find $CTDB_BASE/state/periodic_vacuum -mmin +$CTDB_VACUUM_PERIOD | wc -l` -eq 1 ] && {
-               # vacuum the databases
-               touch $CTDB_BASE/state/periodic_vacuum
-               periodic_vacuum
+
+       # 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
@@ -63,11 +78,19 @@ case $cmd in
                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"` != "0" ] && {
                        echo "OOM. Free:$FREE_MEM while CTDB treshold is $CTDB_MONITOR_FREE_MEMORY"
+                       cat /proc/meminfo
+                       ps auxfww
+                       echo m > /proc/sysrq-trigger
                        ctdb disable
                        sleep 3
                        ctdb shutdown
                }
        }
+       ;;
+
+    *)
+       ctdb_standard_event_handler "$@"
+       ;;
 esac
 
 # all OK