ctdb-2
ctdb-3
nodes.txt
+TAGS
+++ /dev/null
-To build this you need a recent copy of talloc, libreplace and tdb in
-the directory above this directory.
-
install -m644 setup/ctdb.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ctdb
install -m755 setup/ctdb.init $RPM_BUILD_ROOT%{initdir}/ctdb
install -m755 tools/events $RPM_BUILD_ROOT%{_sysconfdir}/ctdb/events
+install -m755 tools/statd-callout $RPM_BUILD_ROOT%{_sysconfdir}/ctdb/statd-callout
install -m755 tools/onnode.ssh $RPM_BUILD_ROOT%{_bindir}
install -m755 tools/onnode.rsh $RPM_BUILD_ROOT%{_bindir}
ln -sf %{_bindir}/onnode.ssh $RPM_BUILD_ROOT%{_bindir}/onnode
%attr(755,root,root) %config %{initdir}/ctdb
%{_sysconfdir}/ctdb/events
+%{_sysconfdir}/ctdb/statd-callout
%{_sbindir}/ctdbd
%{_bindir}/ctdb
%{_bindir}/onnode.ssh
%{_bindir}/onnode
%{_includedir}/ctdb.h
%{_includedir}/ctdb_private.h
-
# the default is not to wait for any local services
# CTDB_WAIT_TCP_PORTS="445 139"
+# the shared directory where you want to put statd information on
+# which clients to notify on a NFS restart
+# there is no default
+# STATD_SHARED_DIRECTORY="/some/shared/directory"
+
# any other options you might want. Run ctdbd --help for a list
# CTDB_OPTIONS=
--- /dev/null
+#!/bin/sh
+
+. /etc/sysconfig/ctdb
+
+[ -z "$STATD_SHARED_DIRECTORY" ] && exit 0
+
+[ -d $STATD_SHARED_DIRECTORY ] || exit 0
+
+case "$1" in
+ add-client)
+ for f in `/bin/ls /etc/ctdb/ip.*`; do
+ fname=`/bin/basename $f`
+ ip=`echo $fname | cut -d. -f2-`
+ [ -d $STATD_SHARED_DIRECTORY/$ip ] || /bin/mkdir $STATD_SHARED_DIRECTORY/$ip
+ /bin/touch $STATD_SHARED_DIRECTORY/$ip/$2
+ done
+ ;;
+ del-client)
+ for f in `/bin/ls /etc/ctdb/ip.*`; do
+ fname=`/bin/basename $f`
+ ip=`echo $fname | cut -d. -f2-`
+ /bin/rm -f $STATD_SHARED_DIRECTORY/$ip/$2
+ done
+ ;;
+ copy)
+ restart_needed=0
+ for f in `/bin/ls /etc/ctdb/ip.*`; do
+ fname=`/bin/basename $f`
+ ip=`echo $fname | cut -d. -f2-`
+ [ -d $STATD_SHARED_DIRECTORY/$ip ] && {
+ /bin/mv $STATD_SHARED_DIRECTORY/$ip $STATD_SHARED_DIRECTORY/$ip.$$
+ /bin/cp -a $STATD_SHARED_DIRECTORY/$ip.$$/. /var/lib/nfs/statd/sm/
+ /bin/rm -rf $STATD_SHARED_DIRECTORY/$ip.$$
+ restart_needed=1
+ }
+ done
+ # restart lockd if necessary
+ [ $restart_needed -eq 1 ] && {
+ ( /sbin/service nfslock status > /dev/null 2>&1 &&
+ /sbin/service nfslock restart > /dev/null 2>&1 ) &
+ } > /dev/null 2>&1
+ ;;
+esac
+
}
# if we have a local arp entry for this IP then remove it
/sbin/arp -d $ip 2> /dev/null
+
+ # having a list of what IPs we have allows statd to do the right
+ # thing via /etc/ctdb/statd-callout
+ /bin/touch /etc/ctdb/ip.$ip
exit 0
;;
# if we have a local arp entry for this IP then remove it
/sbin/arp -d $ip 2> /dev/null
echo $ip >> /etc/ctdb/released_ips
+ /bin/rm -f /etc/ctdb/ip.$ip
exit 0
;;
recovered)
# restart any services as necessary, like NFS
#
+ [ -x /etc/ctdb/statd-callout ] && /etc/ctdb/statd-callout copy
[ -f /etc/ctdb/released_ips ] && {
( /sbin/service nfs status > /dev/null 2>&1 &&
/sbin/service nfs restart > /dev/null 2>&1 ) &