eventscripts: Auto-start/stop services in background
authorMartin Schwenke <martin@meltin.net>
Mon, 3 Sep 2012 05:37:01 +0000 (15:37 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Tue, 2 Oct 2012 22:48:23 +0000 (08:48 +1000)
If $CTDB_SERVICE_AUTOSTARTSTOP="yes" then service start/stop is done
in the background with logging.

Fix some unit tests for samba and winbind.

Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 3a3dae4cb5ec8b4b8381a4013adda25b87641f3a)

ctdb/config/functions
ctdb/tests/eventscripts/49.winbind.monitor.050.sh
ctdb/tests/eventscripts/49.winbind.monitor.051.sh
ctdb/tests/eventscripts/50.samba.monitor.050.sh
ctdb/tests/eventscripts/50.samba.monitor.051.sh
ctdb/tests/eventscripts/scripts/local.sh
ctdb/tests/scripts/unit.sh

index a07aa8ee930a00ff045918c7c032611e6c06c5b5..e2a9b03c8434e42db2233bba6e3a21b8125cddae 100755 (executable)
@@ -95,6 +95,30 @@ die ()
     exit $_rc
 }
 
+# When things are run in the background in an eventscript then logging
+# output might get lost.  This is the "solution".  :-)
+background_with_logging ()
+{
+    _using_syslog=false
+    if [ "$CTDB_SYSLOG" = "yes" -o -z "$CTDB_LOGFILE" ] ; then
+       _using_syslog=true
+    fi
+    case "$CTDB_OPTIONS" in
+       *--syslog*) _using_syslog=true ;;
+    esac
+
+    (
+       "$@" 2>&1 </dev/null |
+       if $_using_syslog ; then
+           logger -t "ctdbd: ${script_name}&"
+       else
+           cat >>"$CTDB_LOGFILE"
+       fi
+    )&
+
+    return 0
+}
+
 ##############################################################
 # check number of args for different events
 ctdb_check_args ()
@@ -1272,13 +1296,13 @@ ctdb_start_stop_service ()
     if is_ctdb_managed_service "$_service_name" ; then
        if ! is_ctdb_previously_managed_service "$_service_name" ; then
            echo "Starting service \"$_service_name\" - now managed"
-           ctdb_service_start "$_service_name"
+           background_with_logging ctdb_service_start "$_service_name"
            exit $?
        fi
     else
        if is_ctdb_previously_managed_service "$_service_name" ; then
            echo "Stopping service \"$_service_name\" - no longer managed"
-           ctdb_service_stop "$_service_name"
+           background_with_logging ctdb_service_stop "$_service_name"
            exit $?
        fi
     fi
index 448c2049aaa4eafaa3fcccd981add10b2407f3f1..d0d55f079c7d12e9223d64aa65f17cccd30e489e 100755 (executable)
@@ -9,9 +9,9 @@ setup_winbind "down"
 export CTDB_SERVICE_AUTOSTARTSTOP="yes"
 export CTDB_MANAGED_SERVICES="foo winbind bar"
 
-ok <<EOF
-Starting service "winbind" - now managed
-Starting winbind: OK
-EOF
-
+ok 'Starting service "winbind" - now managed'
 simple_test
+
+# This depends on output in the log file from the above test
+ok 'Starting winbind: OK'
+check_ctdb_logfile
index 52f9fa2a9a8d58c6cc7fd8b394837dd216411f02..1d68068e30429b200b4bcd6ba3c25aa8f55cfed4 100755 (executable)
@@ -10,9 +10,9 @@ export CTDB_SERVICE_AUTOSTARTSTOP="yes"
 export CTDB_MANAGED_SERVICES="foo"
 unset CTDB_MANAGES_WINBIND
 
-ok <<EOF
-Stopping service "winbind" - no longer managed
-Stopping winbind: OK
-EOF
-
+ok 'Stopping service "winbind" - no longer managed'
 simple_test
+
+# This depends on output in the log file from the above test
+ok 'Stopping winbind: OK'
+check_ctdb_logfile
index e465add0b8086909d0a852712489795980d2d8ac..db66f66e3a8c0fd40928f5c829e76ac2dd2501d3 100755 (executable)
@@ -9,9 +9,9 @@ setup_samba "down"
 export CTDB_SERVICE_AUTOSTARTSTOP="yes"
 export CTDB_MANAGED_SERVICES="foo samba winbind bar"
 
-ok <<EOF
-Starting service "samba" - now managed
-Starting smb: OK
-EOF
-
+ok 'Starting service "samba" - now managed'
 simple_test
+
+# This depends on output in the log file from the above test
+ok 'Starting smb: OK'
+check_ctdb_logfile
index b61046c53d3da89edeaddc500cd379ef95ab5d43..1a9ab22a10c04bffa9c8b5aa0676c4bd72cb263a 100755 (executable)
@@ -10,9 +10,9 @@ export CTDB_SERVICE_AUTOSTARTSTOP="yes"
 export CTDB_MANAGED_SERVICES="foo"
 unset CTDB_MANAGES_SAMBA
 
-ok <<EOF
-Stopping service "samba" - no longer managed
-Stopping smb: OK
-EOF
-
+ok 'Stopping service "samba" - no longer managed'
 simple_test
+
+# This depends on output in the log file from the above test
+ok 'Stopping smb: OK'
+check_ctdb_logfile
index e572a5dba79b61b5d3610d1dde179cd60245f65b..56d09fa980e98ae4a5a50fce23df3a8952dfcb2f 100644 (file)
@@ -23,6 +23,9 @@ fi
 mkdir -p "$EVENTSCRIPTS_TESTS_VAR_DIR"
 export CTDB_VARDIR="$EVENTSCRIPTS_TESTS_VAR_DIR/ctdb"
 
+export CTDB_LOGFILE="${EVENTSCRIPTS_TESTS_VAR_DIR}/log.ctdb"
+touch "$CTDB_LOGFILE" || die "Unable to create CTDB_LOGFILE=$CTDB_LOGFILE"
+
 if [ -d "${TEST_SUBDIR}/etc" ] ; then    
     cp -a "${TEST_SUBDIR}/etc" "$EVENTSCRIPTS_TESTS_VAR_DIR"
     export CTDB_ETCDIR="${EVENTSCRIPTS_TESTS_VAR_DIR}/etc"
@@ -763,7 +766,7 @@ simple_test_event ()
     $_passed || return 1
 
     event="$1" ; shift
-    echo "##################################################"
+    echo "=================================================="
     simple_test "$@"
 }
 
@@ -773,13 +776,26 @@ simple_test_command ()
     : ${_passed:=true}
     $_passed || return 1
 
-    echo "##################################################"
+    echo "=================================================="
     echo "Running command \"$*\""
     _out=$("$@" 2>&1)
 
     result_check
 }
 
+check_ctdb_logfile ()
+{
+    # If something has previously failed then don't continue.
+    : ${_passed:=true}
+    $_passed || return 1
+
+    echo "=================================================="
+    echo "Checking CTDB_LOGFILE=\"${CTDB_LOGFILE}\""
+    _out=$(cat "$CTDB_LOGFILE" 2>&1)
+
+    result_check
+}
+
 # Run an eventscript iteratively.
 # - 1st argument is the number of iterations.
 # - 2nd argument is something to eval to do setup for every iteration.
index 6f92d6cb163c6a8ccb31be9160bf337fe59463f6..b27df45e7634ddbcdc910748ec32863af7505930 100644 (file)
@@ -49,7 +49,7 @@ result_print ()
        if [ -n "$_extra_header" ] ; then
            cat <<EOF
 
-==================================================
+##################################################
 $_extra_header
 EOF
        fi