persistent: add a ctdb_persistent_state member to the ctdb_db context.
[sahlberg/ctdb.git] / config / ctdb.init
index ff8b387377766fd269014dd919642674ce7b55cc..25e158fcc5382abb6ce7f9266991f4854df45b51 100755 (executable)
@@ -39,6 +39,10 @@ unset TMPDIR
     export CTDB_BASE="/etc/ctdb"
 }
 
+[ -z "$CTDB_VARDIR" ] && {
+    export CTDB_VARDIR="/var/ctdb"
+}
+
 . $CTDB_BASE/functions
 loadconfig network
 loadconfig ctdb
@@ -65,7 +69,7 @@ build_ctdb_options () {
        # then return
        [ -z "$2" -o \( -n "$3" -a "$3" != "$2" \) ] && return
 
-       val="$2"
+       val="'$2'"
        case "$1" in
            --*) sep="=" ;;
            -*)  sep=" " ;;
@@ -102,6 +106,7 @@ build_ctdb_options () {
     maybe_set "--no-lmaster"             "$CTDB_CAPABILITY_LMASTER"   "no"
     maybe_set "--lvs --single-public-ip" "$CTDB_LVS_PUBLIC_IP"
     maybe_set "--script-log-level"       "$CTDB_SCRIPT_LOG_LEVEL"
+    maybe_set "--log-ringbuf-size"       "$CTDB_LOG_RINGBUF_SIZE"
     maybe_set "--syslog"                 "$CTDB_SYSLOG"               "yes"
     maybe_set "--max-persistent-check-errors" "$CTDB_MAX_PERSISTENT_CHECK_ERRORS"
 }
@@ -163,6 +168,19 @@ set_retval() {
     return $1
 }
 
+wait_until_ready () {
+    _timeout="${1:-10}" # default is 10 seconds
+
+    _count=0
+    while ! ctdb ping >/dev/null 2>&1 ; do
+       if [ $_count -ge $_timeout ] ; then
+           return 1
+       fi
+       sleep 1
+       _count=$(($_count + 1))
+    done
+}
+
 ctdbd=${CTDBD:-/usr/sbin/ctdbd}
 
 start() {
@@ -170,14 +188,14 @@ start() {
 
     ctdb ping >/dev/null 2>&1 && {
        echo $"CTDB is already running"
-       return 1
+       return 0
     }
 
     build_ctdb_options
 
     check_persistent_databases || return $?
 
-    if [ yes == "$CTDB_SUPPRESS_COREFILE" ]; then
+    if [ "$CTDB_SUPPRESS_COREFILE" = "yes" ]; then
        ulimit -c 0
     else
        ulimit -c unlimited
@@ -185,35 +203,49 @@ start() {
 
     case $init_style in
        valgrind)
-           valgrind -q --log-file=/var/log/ctdb_valgrind \
-               $ctdbd --nosetsched $CTDB_OPTIONS 
+           eval valgrind -q --log-file=/var/log/ctdb_valgrind \
+               $ctdbd --valgrinding "$CTDB_OPTIONS"
            RETVAL=$?
            echo
            ;;
        suse)
-           startproc $ctdbd $CTDB_OPTIONS
-           rc_status -v
+           eval startproc $ctdbd "$CTDB_OPTIONS"
            RETVAL=$?
            ;;
        redhat)
-           daemon $ctdbd $CTDB_OPTIONS
+           eval $ctdbd "$CTDB_OPTIONS"
            RETVAL=$?
-           echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1
            ;;
        debian)
-           start-stop-daemon --start --quiet --background \
-               --exec $ctdbd -- $CTDB_OPTIONS
+           eval start-stop-daemon --start --quiet --background \
+               --exec $ctdbd -- "$CTDB_OPTIONS"
            RETVAL=$?
            ;;
     esac
 
-    sleep 1
+    if [ $RETVAL -eq 0 ] ; then
+       if wait_until_ready ; then
+           set_ctdb_variables
+       else
+           RETVAL=1
+           pkill -9 -f $ctdbd >/dev/null 2>&1
+       fi
+    fi
 
-    set_ctdb_variables
+    case $init_style in
+       suse)
+           set_retval $RETVAL
+           rc_status -v
+           ;;
+       redhat)
+           [ $RETVAL -eq 0 ] && success || failure
+           echo
+           ;;
+    esac
 
     return $RETVAL
-}      
+}
 
 stop() {
     echo -n $"Shutting down ctdbd service: "
@@ -260,7 +292,7 @@ stop() {
 restart() {
     stop
     start
-}      
+}
 
 status() {
     echo -n $"Checking for ctdbd service: "
@@ -273,7 +305,13 @@ status() {
                rc_status -v
                ;;
            redhat)
-               echo ""
+               if [ -f /var/lock/subsys/ctdb ]; then
+                       echo $"ctdb dead but subsys locked"
+                       RETVAL=2
+               else
+                       echo $"ctdb is stopped"
+                       RETVAL=3
+               fi
                ;;
        esac
        return $RETVAL
@@ -290,13 +328,13 @@ case "$1" in
     stop)
        stop
        ;;
-    restart|reload)
+    restart|reload|force-reload)
        restart
        ;;
     status)
        status
        ;;
-    condrestart)
+    condrestart|try-restart)
        ctdb status > /dev/null && restart || :
        ;;
     cron)
@@ -304,7 +342,7 @@ case "$1" in
        ctdb status > /dev/null || restart
        ;;
     *)
-       echo $"Usage: $0 {start|stop|restart|status|cron|condrestart}"
+       echo $"Usage: $0 {start|stop|restart|reload|force-reload|status|cron|condrestart|try-restart}"
        exit 1
 esac