eventscripts: Separate out RPC service restart code
authorMartin Schwenke <martin@meltin.net>
Fri, 2 Aug 2013 06:05:46 +0000 (16:05 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Wed, 14 Aug 2013 05:57:03 +0000 (15:57 +1000)
While doing this:

* Explicitly assign RPC program and version information in
  _nfs_check_rpc_common().  This is more lines of code but is easier
  to read.

* Don't print the options when starting a service.  Trying to print it
  makes the code messy for little benefit.

  Update the eventscript unit testing code and a Ganesha test to
  reflect this.

Signed-off-by: Martin Schwenke <martin@meltin.net>
config/functions
tests/eventscripts/60.ganesha.monitor.141.sh
tests/eventscripts/scripts/local.sh

index 7c525884f5ff95173fc515f44b36c2221b480805..eb90946f5345c4a9154b097b4faf121e95b1497d 100755 (executable)
@@ -281,34 +281,26 @@ _nfs_check_rpc_common ()
            which "rpc.${_prog_name}" >/dev/null 2>&1 || return 0
     esac
 
-    _version=1
-    _rpc_prog="$_prog_name"
-    _restart=""
-    _opts=""
     case "$_prog_name" in
        nfsd)
            _rpc_prog=nfs
            _version=3
-           _restart="echo 'Trying to restart NFS service'"
-           _restart="${_restart}; startstop_nfs restart"
            ;;
        mountd)
-           _opts="${MOUNTD_PORT:+ -p }${MOUNTD_PORT}"
+           _rpc_prog=mountd
+           _version=1
            ;;
        rquotad)
-           _opts="${RQUOTAD_PORT:+ -p }${RQUOTAD_PORT}"
+           _rpc_prog=rquotad
+           _version=1
            ;;
        lockd)
            _rpc_prog=nlockmgr
            _version=4
-           _restart="echo 'Trying to restart lock manager service'"
-           _restart="${_restart}; startstop_nfslock restart"
            ;;
        statd)
            _rpc_prog=status
-           _opts="${STATD_HOSTNAME:+ -n }${STATD_HOSTNAME}"
-           _opts="${_opts}${STATD_PORT:+ -p }${STATD_PORT}"
-           _opts="${_opts}${STATD_OUTGOING_PORT:+ -o }${STATD_OUTGOING_PORT}"
+           _version=1
            ;;
        *)
            echo "Internal error: unknown RPC program \"$_prog_name\"."
@@ -342,34 +334,11 @@ _nfs_check_rpc_action ()
            verbose)
                echo "$ctdb_check_rpc_out"
                ;;
-           restart|restart:*)
-               # No explicit command specified, construct rpc command.
-               if [ -z "$_restart" ] ; then
-                   _p="rpc.${_prog_name}"
-                   _restart="echo 'Trying to restart $_prog_name [${_p}${_opts}]'"
-                   _restart="${_restart}; killall -q -9 $_p"
-                   _restart="${_restart}; $_p $_opts"
-               fi
-
-               # Process restart flags...
-               _flags="${_action#restart:}"
-               # There may not have been a colon...
-               [ "$_flags" != "$_action" ] || _flags=""
-               # q=quiet - everything to /dev/null
-               if [ "${_flags#*q}" != "$_flags" ] ; then
-                   _restart="{ ${_restart} ; } >/dev/null 2>&1"
-               fi
-               # s=stealthy - last command to /dev/null
-               if [ "${_flags#*s}" != "$_flags" ] ; then
-                   _restart="${_restart} >/dev/null 2>&1"
-               fi
-               # b=background - the whole thing, easy and reliable
-               if [ "${_flags#*b}" != "$_flags" ] ; then
-                   _restart="{ ${_restart} ; } &"
-               fi
-
-               # Do it!
-               eval "${_restart}"
+           restart)
+               _nfs_restart_rpc_service "$_prog_name"
+               ;;
+           restart:b)
+               _nfs_restart_rpc_service "$_prog_name" true
                ;;
            unhealthy)
                exit 1
@@ -383,6 +352,52 @@ _nfs_check_rpc_action ()
     return 0
 }
 
+_nfs_restart_rpc_service ()
+{
+    _prog_name="$1"
+    _background="${2:-false}"
+
+    if $_background ; then
+       _maybe_background="background_with_logging"
+    else
+       _maybe_background=""
+    fi
+
+    _p="rpc.${_prog_name}"
+
+    case "$_prog_name" in
+       nfsd)
+           echo "Trying to restart NFS service"
+           $_maybe_background startstop_nfs restart
+           ;;
+       mountd)
+           echo "Trying to restart $_prog_name [${_p}]"
+           killall -q -9 "$_p"
+           $_maybe_background $_p ${MOUNTD_PORT:+-p} $MOUNTD_PORT
+           ;;
+       rquotad)
+           echo "Trying to restart $_prog_name [${_p}]"
+           killall -q -9 "$_p"
+           $_maybe_background $_p ${RQUOTAD_PORT:+-p} $RQUOTAD_PORT
+           ;;
+       lockd)
+           echo "Trying to restart lock manager service"
+           $_maybe_background startstop_nfslock restart
+           ;;
+       statd)
+           echo "Trying to restart $_prog_name [${_p}]"
+           killall -q -9 "$_p"
+           $_maybe_background $_p \
+               ${STATD_HOSTNAME:+-n} $STATD_HOSTNAME \
+               ${STATD_PORT:+-p} $STATD_PORT \
+               ${STATD_OUTGOING_PORT:+-o} $STATD_OUTGOING_PORT
+           ;;
+       *)
+           echo "Internal error: unknown RPC program \"$_prog_name\"."
+           exit 1
+    esac
+}
+
 ######################################################
 # check that a rpc server is registered with portmap
 # and responding to requests
index 656a530728919f0d7f2b1c49276ab24e36d1a8ab..9cd82f84cc2f2d3951061c24f35b6b7e9ab3cac5 100755 (executable)
@@ -13,7 +13,7 @@ ok_null
 simple_test || exit $?
 
 ok<<EOF
-Trying to restart statd [rpc.statd -n cluster1 -H /etc/ctdb/statd-callout ]
+Trying to restart statd [rpc.statd]
 EOF
 simple_test || exit $?
 
@@ -24,7 +24,7 @@ ok<<EOF
 ERROR: status failed RPC check:
 rpcinfo: RPC: Program not registered
 program status version 1 is not available
-Trying to restart statd [rpc.statd -n cluster1 -H /etc/ctdb/statd-callout ]
+Trying to restart statd [rpc.statd]
 EOF
 simple_test || exit $?
 
index 594656c4134c4448d7337a7780e07ed70b3e7f94..fafc8f3b2e4e6495ac94fdac9f5b13752f26cd94 100644 (file)
@@ -693,14 +693,8 @@ ERROR: $_pn failed RPC check:
 rpcinfo: RPC: Program not registered
 program $_pn version $_ver is not available"
                        ;;
-                   restart|restart:*)
-                       _opts=""
+                   restart*)
                        _p="rpc.${_progname}"
-                       case "$_progname" in
-                           statd)
-                               _opts="${STATD_HOSTNAME:+ -n }${STATD_HOSTNAME}"
-                               ;;
-                       esac
                        case "$_action" in
                            *:b) _bg="&" ;;
                            *)   _bg=""  ;;
@@ -730,7 +724,7 @@ Trying to restart lock manager service
 ${_bg}Starting nfslock: OK"
                                ;;
                            *)
-                               _t="Trying to restart $_progname [${_p}${_opts}]"
+                               _t="Trying to restart $_progname [${_p}]"
                        esac
                        _out="${_out}${_out:+${_nl}}${_t}"
                        ;;