This file is indexed.

/etc/ctdb/events.d/00.ctdb is in ctdb 1.12+git20120201-5.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
#!/bin/sh
############################
# main event script for ctdb
#
# This script is called with one of the following sets of arguments
#     startup    : called when ctdb starts
#     shutdown   : called when ctdb shuts down
#     takeip     : called when an IP address is taken over
#     releaseip  : called when an IP address is released
#     recovered  : called when ctdb has finished a recovery event

. $CTDB_BASE/functions
loadconfig

ctdb_setup_service_state_dir "ctdb"

#
update_config_from_tdb() {

    # Pull optional ctdb configuration data out of config.tdb
    _key="public_addresses:node#$(ctdb -t 1 xpnn|sed -e 's/.*://')"
    _t="$service_state_dir/public_addresses"
    rm -f "$_t"

    if ctdb pfetch config.tdb "$_key" "$_t" 2>/dev/null && \
	[ -s "$_t" -a -n "$CTDB_PUBLIC_ADDRESSES"] && \
	! cmp -s "$_t" "$CTDB_PUBLIC_ADDRESSES" ; then

	echo "CTDB public address configuration has changed."
	echo "Extracting new configuration from database."
	diff "$_t" "$CTDB_PUBLIC_ADDRESSES"
	cp "$_t" "$CTDB_PUBLIC_ADDRESSES"
	echo "Restarting CTDB"
	service ctdb restart &
    fi
}

ctdb_check_args "$@"

case "$1" in 
     init)
        # make sure we have a blank state directory for the scripts to work with
	rm -rf $CTDB_VARDIR/state
	# Look at the pattern - this should not be -rf!!!
	rm -f $ctdb_managed_dir/*
	mkdir -p $CTDB_VARDIR/state || {
	    ret=$?
	    echo "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
	    varname=`echo $v | cut -d= -f1`
	    value=`echo $v | cut -d= -f2`
	    ctdb setvar $varname $value || exit 1
	    echo "Set $varname to $value"
	done || exit 1
	;;

    startup)
	update_config_from_tdb &
	;;
    monitor)
	# Inherit the debug level from ctdbd on each monitor run.  If
	# there's a more urgent need then override CTDB_CURRENT_DEBUGLEVEL
	# using a file in $CTDB_BASE/rc.local.d/.
        ctdb_set_current_debuglevel create

	# 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
	}

	# 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 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" ] || {
		FREE_MEM=`free -m | grep "buffers/cache" | while read A B C D ;do 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
exit 0