summaryrefslogtreecommitdiff
path: root/ctdb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2022-05-23 14:21:37 +1000
committerAmitay Isaacs <amitay@samba.org>2022-06-24 09:49:32 +0000
commit8b8660d883cb5130f40fa8993cd4cae96cf1dde4 (patch)
tree24871028c7276c9184fe256233a8535e1a3cdd0c /ctdb
parentcd018d0ff5c57ccd50f64fd0ed1591e3dfe27baf (diff)
downloadsamba-8b8660d883cb5130f40fa8993cd4cae96cf1dde4.tar.gz
ctdb-scripts: Refactor the manual RPC service start/stop
This logic needs improving, so factor the decision making into new functions service_or_manual_stop() and service_or_manual_start(). Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb')
-rwxr-xr-xctdb/config/nfs-linux-kernel-callout132
1 files changed, 81 insertions, 51 deletions
diff --git a/ctdb/config/nfs-linux-kernel-callout b/ctdb/config/nfs-linux-kernel-callout
index 6e22548e7c8..82f481343f5 100755
--- a/ctdb/config/nfs-linux-kernel-callout
+++ b/ctdb/config/nfs-linux-kernel-callout
@@ -138,9 +138,42 @@ nfs_service_start()
##################################################
# service "stop" and "start" options for restarting
-service_stop()
+manual_stop()
{
case "$1" in
+ mountd)
+ killall -q -9 rpc.mountd
+ ;;
+ rquotad)
+ killall -q -9 rpc.rquotad
+ ;;
+ status)
+ killall -q -9 rpc.statd
+ ;;
+ *)
+ echo "$0: Internal error - invalid call to manual_stop()"
+ exit 1
+ ;;
+ esac
+}
+
+service_or_manual_stop()
+{
+ _rpc_service="$1"
+ _system_service="$2"
+
+ if [ -n "$_system_service" ]; then
+ service "$_system_service" stop
+ else
+ manual_stop "$_rpc_service"
+ fi
+}
+
+service_stop()
+{
+ _rpc_service="$1"
+
+ case "$_rpc_service" in
nfs)
echo 0 >"${PROCFS_PATH}/fs/nfsd/threads"
nfs_service_stop >/dev/null 2>&1 || true
@@ -154,31 +187,13 @@ service_stop()
fi
;;
mountd)
- if [ -n "$nfs_mountd_service" ]; then
- service "$nfs_mountd_service" stop
- return
- fi
-
- # Default to stopping by hand
- killall -q -9 rpc.mountd
+ service_or_manual_stop "$_rpc_service" "$nfs_mountd_service"
;;
rquotad)
- if [ -n "$nfs_rquotad_service" ]; then
- service "$nfs_rquotad_service" stop
- return
- fi
-
- # Default to stopping by hand
- killall -q -9 rpc.rquotad
+ service_or_manual_stop "$_rpc_service" "$nfs_rquotad_service"
;;
status)
- if [ -n "$nfs_status_service" ]; then
- service "$nfs_status_service" stop
- return
- fi
-
- # Default to stopping by hand
- killall -q -9 rpc.statd
+ service_or_manual_stop "$_rpc_service" "$nfs_status_service"
;;
*)
usage
@@ -186,26 +201,10 @@ service_stop()
esac
}
-service_start()
+manual_start()
{
case "$1" in
- nfs)
- nfs_service_start
- ;;
- nlockmgr)
- if [ -n "$nfs_lock_service" ]; then
- service "$nfs_lock_service" start
- else
- service "$nfs_service" start
- fi
- ;;
mountd)
- if [ -n "$nfs_mountd_service" ]; then
- service "$nfs_mountd_service" start
- return
- fi
-
- # Default to starting by hand
nfs_load_config
if [ -z "$RPCMOUNTDOPTS" ]; then
RPCMOUNTDOPTS="${MOUNTD_PORT:+-p }$MOUNTD_PORT"
@@ -214,12 +213,6 @@ service_start()
rpc.mountd $RPCMOUNTDOPTS
;;
rquotad)
- if [ -n "$nfs_rquotad_service" ]; then
- service "$nfs_rquotad_service" start
- return
- fi
-
- # Default to starting by hand
nfs_load_config "$nfs_rquotad_config"
if [ -z "$RPCRQUOTADOPTS" ]; then
RPCRQUOTADOPTS="${RQUOTAD_PORT:+-p }$RQUOTAD_PORT"
@@ -228,12 +221,6 @@ service_start()
rpc.rquotad $RPCRQUOTADOPTS
;;
status)
- if [ -n "$nfs_status_service" ]; then
- service "$nfs_status_service" start
- return
- fi
-
- # Default to starting by hand
nfs_load_config
# Red Hat uses STATDARG, Debian uses STATDOPTS
opts="${STATDARG:-${STATDOPTS:-''}}"
@@ -250,6 +237,49 @@ service_start()
rpc.statd $opts
;;
*)
+ echo "$0: Internal error - invalid call to manual_start()"
+ exit 1
+ ;;
+ esac
+}
+
+service_or_manual_start()
+{
+ _rpc_service="$1"
+ _system_service="$2"
+
+ if [ -n "$_system_service" ]; then
+ service "$_system_service" start
+ else
+ manual_start "$_rpc_service"
+ fi
+}
+
+service_start()
+{
+ _rpc_service="$1"
+
+ case "$_rpc_service" in
+ nfs)
+ nfs_service_start
+ ;;
+ nlockmgr)
+ if [ -n "$nfs_lock_service" ]; then
+ service "$nfs_lock_service" start
+ else
+ service "$nfs_service" start
+ fi
+ ;;
+ mountd)
+ service_or_manual_start "$_rpc_service" "$nfs_mountd_service"
+ ;;
+ rquotad)
+ service_or_manual_start "$_rpc_service" "$nfs_rquotad_service"
+ ;;
+ status)
+ service_or_manual_start "$_rpc_service" "$nfs_status_service"
+ ;;
+ *)
usage
;;
esac