data.dsize = sizeof(c);
/* tell the recmaster that something has changed */
- ctdb_send_message(ctdb, ctdb->recovery_master, CTDB_SRVID_NODE_FLAGS_CHANGED, data);
+ ctdb_daemon_send_message(ctdb, ctdb->recovery_master, CTDB_SRVID_NODE_FLAGS_CHANGED, data);
}
return;
}
- DEBUG(0,("Node %u has changed flags - was 0x%x now 0x%x\n",
- c->vnn, nodemap->nodes[i].flags, c->flags));
+ DEBUG(0,("Node %u has changed flags - now 0x%x\n", c->vnn, c->flags));
nodemap->nodes[i].flags = c->flags;
{ "RecoverInterval", 1, offsetof(struct ctdb_tunable, recover_interval) },
{ "ElectionTimeout", 3, offsetof(struct ctdb_tunable, election_timeout) },
{ "TakeoverTimeout", 5, offsetof(struct ctdb_tunable, takeover_timeout) },
- { "MonitorInterval", 60, offsetof(struct ctdb_tunable, monitor_interval) },
+ { "MonitorInterval", 15, offsetof(struct ctdb_tunable, monitor_interval) },
};
/*
# call all application or local scripts
[ -d /etc/ctdb/events.d ] && {
# only accept scripts of the form NN.name
- /bin/ls /etc/ctdb/events.d | /bin/grep '^[0-9]*\.\w*$' | sort -n |
- while read SCRIPT; do
+ scripts=`/bin/ls /etc/ctdb/events.d | /bin/grep '^[0-9]*\.\w*$' | sort -n`
+ for SCRIPT in $scripts; do
[ -x /etc/ctdb/events.d/$SCRIPT ] && {
/etc/ctdb/events.d/$SCRIPT $cmd "$1" "$2" "$3" || exit 1
}
# public interface
. /etc/ctdb/functions
+loadconfig ctdb
+
+[ -z "$CTDB_PUBLIC_INTERFACE" ] && exit 0
cmd="$1"
shift
shutdown)
;;
+ monitor)
+ [ -x /usr/sbin/ethtool ] && {
+ /usr/sbin/ethtool $CTDB_PUBLIC_INTERFACE | grep 'Link detected: yes' > /dev/null || {
+ echo "`date` ERROR: No link on network interface $CTDB_PUBLIC_INTERFACE"
+ exit 1
+ }
+ }
+ ;;
+
esac
exit 0
service smb stop
service winbind stop
;;
+
+ monitor)
+ smb_dirs=`testparm -st 2> /dev/null | egrep '^\s*path = ' | cut -d= -f2`
+ ctdb_check_directories "Samba" $smb_dirs
+
+ smb_ports=`testparm -stv 2> /dev/null | egrep '\s*smb ports =' | cut -d= -f2`
+ ctdb_check_tcp_ports "Samba" $smb_ports
+ ;;
+
esac
# ignore unknown commands
/bin/rm -f /etc/ctdb/state/statd/restart
;;
+
+ monitor)
+ # check that lockd responds to rpc requests
+ ctdb_check_rpc "statd" 100024 1
+ ctdb_check_rpc "lockd" 100021 1
+ ctdb_check_directories "statd" $STATD_SHARED_DIRECTORY
+ ;;
+
esac
exit 0
cmd="$1"
shift
+PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
+
case $cmd in
startup)
mkdir -p /etc/ctdb/state/nfs
/bin/rm -f /etc/ctdb/state/nfs/restart
;;
+ monitor)
+ # check that NFS responds to rpc requests
+ ctdb_check_rpc "NFS" 100003 3
+ ctdb_check_rpc "mount" 100005 1
+
+ # and that its directories are available
+ nfs_dirs=`grep -v '^#' < /etc/exports | cut -d' ' -f1`
+ ctdb_check_directories "nfs" $nfs_dirs
+ ;;
+
esac
exit 0
######################################################
# wait for a set of tcp ports
-# usage: ctdb_wait_tcp_ports SERICE_NAME <ports...>
+# usage: ctdb_wait_tcp_ports SERVICE_NAME <ports...>
######################################################
ctdb_wait_tcp_ports() {
service_name="$1"
}
+
######################################################
# wait for a set of directories
-# usage: ctdb_wait_directories SERICE_NAME <directories...>
+# usage: ctdb_wait_directories SERVICE_NAME <directories...>
######################################################
ctdb_wait_directories() {
service_name="$1"
echo "`/bin/date` Local directories for $service_name are available"
}
+
+######################################################
+# check that a rpc server is registered with portmap
+# and responding to requests
+# usage: ctdb_check_rpc SERVICE_NAME PROGNUM VERSION
+######################################################
+ctdb_check_rpc() {
+ service_name="$1"
+ prognum="$2"
+ version="$3"
+ rpcinfo -u localhost $prognum $version > /dev/null || {
+ echo "`date` ERROR: $service_name not responding to rpc requests"
+ exit 1
+ }
+}
+
+######################################################
+# check a set of directories is available
+# usage: ctdb_check_directories SERVICE_NAME <directories...>
+######################################################
+ctdb_check_directories() {
+ service_name="$1"
+ shift
+ wait_dirs="$*"
+ [ -z "$wait_dirs" ] && return;
+ for d in $wait_dirs; do
+ [ -d $d ] || {
+ echo "`date` ERROR: $service_name directory $d not available"
+ exit 1
+ }
+ done
+}
+
+######################################################
+# check a set of tcp ports
+# usage: ctdb_check_tcp_ports SERVICE_NAME <ports...>
+######################################################
+ctdb_check_tcp_ports() {
+ service_name="$1"
+ shift
+ wait_ports="$*"
+ [ -z "$wait_ports" ] && return;
+ for p in $wait_ports; do
+ all_ok=1
+ if [ -x /usr/bin/netcat ]; then
+ /usr/bin/netcat -z 127.0.0.1 $p || all_ok=0
+ elif [ -x /usr/bin/nc ]; then
+ /usr/bin/nc -z 127.0.0.1 $p || all_ok=0
+ fi
+ [ $all_ok -eq 1 ] || {
+ echo "`date` ERROR: $service_name tcp port $p is not responding"
+ exit 1
+ }
+ done
+}
Packager: Samba Team <samba@samba.org>
Name: ctdb
Version: 1.0
-Release: 1
+Release: 2
Epoch: 0
License: GNU GPL version 2
Group: System Environment/Daemons
##
echo "$(basename $0): Getting Ready to build release package"
cd ${SPECDIR}
-${RPMBUILD} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE
+${RPMBUILD} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE || exit 1
echo "$(basename $0): Done."
[ ${REMOVE_LN} ] && /bin/rm -f $REMOVE_LN
shift
case $cmd in
+ monitor)
+ echo "`date` monitor event"
+ exit 0
+ ;;
startup)
echo "`date` ctdb startup event"
exit 0;