merge from tridge
authorRonnie Sahlberg <sahlberg@ronnie>
Wed, 6 Jun 2007 03:01:24 +0000 (13:01 +1000)
committerRonnie Sahlberg <sahlberg@ronnie>
Wed, 6 Jun 2007 03:01:24 +0000 (13:01 +1000)
(This used to be ctdb commit 269bcf734b199ae15abd3bc09657030d178cff91)

12 files changed:
ctdb/common/ctdb_monitor.c
ctdb/common/ctdb_recoverd.c
ctdb/common/ctdb_tunables.c
ctdb/config/events
ctdb/config/events.d/10.interface
ctdb/config/events.d/50.samba
ctdb/config/events.d/59.nfslock
ctdb/config/events.d/60.nfs
ctdb/config/functions
ctdb/packaging/RPM/ctdb.spec
ctdb/packaging/RPM/makerpms.sh
ctdb/tests/events

index ffbb4821d3d7b6d31a6c7466666822426439ec57..2723b09d24ae9daa08f0c88d048656f855651c87 100644 (file)
@@ -122,7 +122,7 @@ static void ctdb_health_callback(struct ctdb_context *ctdb, int status, void *p)
        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);
 }
 
 
index 20dc349bc5bda69184836049919c71940b5980f0..9adbe5fbcf67ad747938e88f308f0d7d4000983a 100644 (file)
@@ -991,8 +991,7 @@ static void monitor_handler(struct ctdb_context *ctdb, uint64_t srvid,
                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;
        
index d417d6c2763988268b054451638b3f1af32fdabc..c799ce4ec4c40f2703d8358b54d38114567b01a8 100644 (file)
@@ -36,7 +36,7 @@ static const struct {
        { "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) },
 };
 
 /*
index e60643da03d57980554bc7793b8167c4a5175f28..cc74a6c8715a204de47c73ad9af7930cb50e0f5c 100755 (executable)
@@ -39,8 +39,8 @@ esac
 # 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
        }
index ea28eb70451b1062410234499f10f1d1fb00779a..a6fcbba9b4e102b07fa830c98a9f2a5493031da1 100755 (executable)
@@ -6,6 +6,9 @@
 # public interface
 
 . /etc/ctdb/functions
+loadconfig ctdb
+
+[ -z "$CTDB_PUBLIC_INTERFACE" ] && exit 0
 
 cmd="$1"
 shift
@@ -73,6 +76,15 @@ case $cmd in
      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
index affd964c7defcb7056c45bcf6f55f3457fd760e8..75342f5f0db36aeb730ea121d7787102d63d0c30 100755 (executable)
@@ -50,6 +50,15 @@ case $cmd in
        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
index 4bdf51f778581e94f93e5ae4191641d675aa1e3c..1dba335824d0636fb8d2c37bddadd4bef49e617a 100755 (executable)
@@ -51,6 +51,14 @@ case $cmd in
 
        /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
index 258a2309d0cebb66c6ba74253eea08c4e4b441df..549d87cc233268ff4947c3208d6ba4a724497301 100755 (executable)
@@ -9,6 +9,8 @@ loadconfig nfs
 cmd="$1"
 shift
 
+PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
+
 case $cmd in 
      startup)
        mkdir -p /etc/ctdb/state/nfs
@@ -45,6 +47,16 @@ case $cmd in
        /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
index f557d62910719bba52741be0848d9c2691f5d498..4219f2238388796b8e7eda895e75cb2b08bfcaa7 100644 (file)
@@ -28,7 +28,7 @@ service() {
 
 ######################################################
 # 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"
@@ -59,9 +59,10 @@ ctdb_wait_tcp_ports() {
 }
 
 
+
 ######################################################
 # 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"
@@ -84,3 +85,58 @@ ctdb_wait_directories() {
   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
+}
index 3f81ecaf7bd54e0db2ef31221d82d01d18c140ed..7ee0ce31f2accf5b7a55c18354e049000d9c4012 100644 (file)
@@ -5,7 +5,7 @@ Vendor: Samba Team
 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
index df06b905c64a777219a02f0f80c580760351c061..a78e22d5a66047ee15412c4f0ecfacf307fbb88f 100755 (executable)
@@ -81,7 +81,7 @@ cp -p packaging/RPM/ctdb.spec ${SPECDIR}
 ##
 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
index 00b0e49a21230541f1a00ea87ecc88de0d9f8292..70df49a34e16586e6bd543744f550fb4eee99c05 100755 (executable)
@@ -5,6 +5,10 @@ cmd="$1"
 shift
 
 case $cmd in 
+    monitor)
+       echo "`date` monitor event"
+       exit 0
+       ;;
      startup)
        echo "`date` ctdb startup event"
        exit 0;