[SCM] Samba Shared Repository - branch master updated
Amitay Isaacs
amitay at samba.org
Fri Jun 24 10:41:01 UTC 2022
The branch, master has been updated
via 80ba66013ef ctdb-scripts: Drop use of eval in CTDB callout handling
via 4cbb0b13ba2 ctdb-tests: Do not require eval tricks for faking NFS callout
via 0247fd8a02b ctdb-scripts: Avoid ShellCheck warning SC2162
via 7f799a8d6f8 ctdb-tests: Fix faking of program stack traces
via 0b728a4e8f6 ctdb-tests: Improve Debian-style event script unit testing
via 7f3a0c7e9c5 ctdb-scripts: Parameterise /etc directory to aid testing
via 337ef7c1b41 ctdb-scripts: Set NFS services to "AUTO" if started by another service
via 8b8660d883c ctdb-scripts: Refactor the manual RPC service start/stop
via cd018d0ff5c ctdb-scripts: Simplify and rename basic_stop() and basic_start()
via 09fd1e55796 ctdb-scripts: Move nfslock out of basic_stop() and basic_start()
via a43a1ebe51d ctdb-tests: Reformat script
from 8458449ddf1 s3:waf: Fix version number of public libsmbconf
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 80ba66013efeec2f2df8429321a8630ef7780a8f
Author: Martin Schwenke <martin at meltin.net>
Date: Fri May 27 23:19:46 2022 +1000
ctdb-scripts: Drop use of eval in CTDB callout handling
eval is not required and causes the follow ShellCheck warning:
SC2294 (warning): eval negates the benefit of arrays. Drop eval to
preserve whitespace/symbols (or eval as string).
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
Autobuild-User(master): Amitay Isaacs <amitay at samba.org>
Autobuild-Date(master): Fri Jun 24 10:40:50 UTC 2022 on sn-devel-184
commit 4cbb0b13ba26a4b8de1334f1d166e0cb33d89383
Author: Martin Schwenke <martin at meltin.net>
Date: Fri May 27 23:16:28 2022 +1000
ctdb-tests: Do not require eval tricks for faking NFS callout
The current code requires the use of eval in the NFS callout handling
to facilitate testing. Improve the code to remove this need.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 0247fd8a02bf3840940d781c8323be3fa07c4d5e
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 13:40:20 2022 +1100
ctdb-scripts: Avoid ShellCheck warning SC2162
SC2162 read without -r will mangle backslashes
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 7f799a8d6f89d2b9f7ae06858e901981d9cc186a
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 13:00:40 2022 +1100
ctdb-tests: Fix faking of program stack traces
The current code works in all current cases but is lazy and wrong.
Fix it to avoid breaking on code changes involving different thread
setups.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 0b728a4e8f6f81b5c2b44fa65d2b68167eb8e7ce
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 12:55:07 2022 +1100
ctdb-tests: Improve Debian-style event script unit testing
Tests can be run by hand using different distro styles, such as:
CTDB_NFS_DISTRO_STYLE=systemd-debian \
./tests/run_tests.sh ./tests/UNIT/eventscripts/{06,60}.nfs.*
This fixes known problems for Debian styles, so the tests now pass for
the following values of CTDB_NFS_DISTRO_STYLE:
systemd-redhat
sysvinit-redhat
systemd-debian
sysvinit-debian
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 7f3a0c7e9c5388b5947e0d79105335508967a7ea
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 12:52:10 2022 +1100
ctdb-scripts: Parameterise /etc directory to aid testing
At the moment test results can be influenced by real system
configuration files.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 337ef7c1b417cce94a6f1480f17dae477fadf565
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 12:47:10 2022 +1100
ctdb-scripts: Set NFS services to "AUTO" if started by another service
For example, in Sys-V init "rquotad" is started by the main "nfs"
service. At the moment the call-out can't distinguish between this
case and "should never be run". Services set to "AUTO" are
hand-stopped/started via service_stop()/service_start() on failure via
restart_after.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 8b8660d883cb5130f40fa8993cd4cae96cf1dde4
Author: Martin Schwenke <martin at meltin.net>
Date: Mon May 23 14:21:37 2022 +1000
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 at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit cd018d0ff5c57ccd50f64fd0ed1591e3dfe27baf
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 10:41:26 2022 +1100
ctdb-scripts: Simplify and rename basic_stop() and basic_start()
Drop the argument. These now just stop/start the overall NFS service,
so rename them appropriately.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit 09fd1e55796509b08a8cce39420c3c656024455c
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 10:33:05 2022 +1100
ctdb-scripts: Move nfslock out of basic_stop() and basic_start()
These are only called in one place and should be done inline, since
that is less confusing.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
commit a43a1ebe51d61790a9f762ab04aa5b9d809953d5
Author: Martin Schwenke <martin at meltin.net>
Date: Fri Mar 18 10:53:45 2022 +1100
ctdb-tests: Reformat script
Samba is reformatting shell scripts using
shfmt -w -p -i 0 -fn
so update this one before editing.
Signed-off-by: Martin Schwenke <martin at meltin.net>
Reviewed-by: Amitay Isaacs <amitay at gmail.com>
-----------------------------------------------------------------------
Summary of changes:
ctdb/config/functions | 4 +-
ctdb/config/nfs-linux-kernel-callout | 414 ++++++++++++---------
.../UNIT/eventscripts/06.nfs.releaseip.001.sh | 6 +-
.../UNIT/eventscripts/06.nfs.releaseip.002.sh | 6 +-
ctdb/tests/UNIT/eventscripts/06.nfs.takeip.001.sh | 6 +-
ctdb/tests/UNIT/eventscripts/06.nfs.takeip.002.sh | 6 +-
ctdb/tests/UNIT/eventscripts/60.nfs.monitor.108.sh | 6 +-
ctdb/tests/UNIT/eventscripts/60.nfs.monitor.109.sh | 6 +-
.../UNIT/eventscripts/60.nfs.releaseip.002.sh | 6 +-
.../tests/UNIT/eventscripts/60.nfs.shutdown.002.sh | 6 +-
ctdb/tests/UNIT/eventscripts/60.nfs.startup.002.sh | 6 +-
ctdb/tests/UNIT/eventscripts/60.nfs.takeip.002.sh | 6 +-
ctdb/tests/UNIT/eventscripts/scripts/60.nfs.sh | 37 +-
ctdb/tests/UNIT/eventscripts/scripts/local.sh | 6 +
.../tests/UNIT/eventscripts/stubs/nfs-fake-callout | 15 +
15 files changed, 307 insertions(+), 229 deletions(-)
create mode 100755 ctdb/tests/UNIT/eventscripts/stubs/nfs-fake-callout
Changeset truncated at 500 lines:
diff --git a/ctdb/config/functions b/ctdb/config/functions
index a4e73ad0594..82ed0957aa0 100755
--- a/ctdb/config/functions
+++ b/ctdb/config/functions
@@ -920,7 +920,7 @@ nfs_callout_register ()
echo "$CTDB_NFS_CALLOUT" >"$nfs_callout_cache_callout"
- _t=$(eval "$CTDB_NFS_CALLOUT" "register")
+ _t=$("$CTDB_NFS_CALLOUT" "register")
if [ -n "$_t" ] ; then
echo "$_t" |
while IFS="" read _op ; do
@@ -945,7 +945,7 @@ nfs_callout ()
# Run the operation if it is registered...
if [ -e "${nfs_callout_cache_ops}/${1}" ] || \
[ -e "${nfs_callout_cache_ops}/ALL" ]; then
- eval "$CTDB_NFS_CALLOUT" "$@"
+ "$CTDB_NFS_CALLOUT" "$@"
fi
}
diff --git a/ctdb/config/nfs-linux-kernel-callout b/ctdb/config/nfs-linux-kernel-callout
index 9c2d0418e55..f2f3e3824d0 100755
--- a/ctdb/config/nfs-linux-kernel-callout
+++ b/ctdb/config/nfs-linux-kernel-callout
@@ -16,6 +16,16 @@ nfs_exports_file="${CTDB_NFS_EXPORTS_FILE:-/var/lib/nfs/etab}"
# test variable only.
nfs_distro_style="${CTDB_NFS_DISTRO_STYLE:-systemd-redhat}"
+# As above, edit the default value below. CTDB_SYS_ETCDIR is a
+# test variable only.
+etc_dir="${CTDB_SYS_ETCDIR:-/etc}"
+
+# A value of "AUTO" for any service means that service is usually
+# automatically started and stopped by one of the other services.
+# Such services will still be restarted by hand on failure, if
+# configured to do so. This allows services that should not be
+# running to be set to "".
+
case "$nfs_distro_style" in
systemd-*)
# Defaults
@@ -24,11 +34,11 @@ systemd-*)
nfs_mountd_service="nfs-mountd"
nfs_status_service="rpc-statd"
nfs_rquotad_service="rpc-rquotad"
- nfs_config="/etc/sysconfig/nfs"
+ nfs_config="${etc_dir}/sysconfig/nfs"
nfs_rquotad_config="" # Not use with systemd, restart via service
case "$nfs_distro_style" in
- *-redhat|*-suse)
+ *-redhat | *-suse)
: # Defaults only
;;
*-debian)
@@ -37,17 +47,18 @@ systemd-*)
*)
echo "Internal error"
exit 1
+ ;;
esac
;;
sysvinit-*)
# Defaults
nfs_service="nfs"
- nfs_lock_service=""
- nfs_mountd_service=""
- nfs_status_service=""
- nfs_rquotad_service=""
- nfs_config="/etc/sysconfig/nfs"
+ nfs_lock_service="AUTO"
+ nfs_mountd_service="AUTO"
+ nfs_status_service="AUTO"
+ nfs_rquotad_service="AUTO"
+ nfs_config="${etc_dir}/sysconfig/nfs"
nfs_rquotad_config="$nfs_config"
case "$nfs_distro_style" in
@@ -59,302 +70,334 @@ sysvinit-*)
;;
*-debian)
nfs_service="nfs-kernel-server"
- nfs_config="/etc/default/nfs-kernel-server"
- nfs_rquotad_config="/etc/default/quota"
+ nfs_config="${etc_dir}/default/nfs-kernel-server"
+ nfs_rquotad_config="${etc_dir}/default/quota"
;;
*)
echo "Internal error"
exit 1
+ ;;
esac
;;
*)
echo "Internal error"
exit 1
+ ;;
esac
# Override for unit testing
-if [ -z "$PROCFS_PATH" ] ; then
- PROCFS_PATH="/proc"
+if [ -z "$PROCFS_PATH" ]; then
+ PROCFS_PATH="/proc"
fi
##################################################
-usage ()
+usage()
{
- _c=$(basename "$0")
- cat <<EOF
+ _c=$(basename "$0")
+ cat <<EOF
usage: $_c { shutdown | startup }
$_c { stop | start } { nfs | nlockmgr }
$_c { monitor-list-shares | monitor-post }
$_c { register }
EOF
- exit 1
+ exit 1
}
##################################################
-nfs_load_config ()
+nfs_load_config()
{
_config="${1:-${nfs_config}}"
- if [ -r "$_config" ] ; then
+ if [ -r "$_config" ]; then
. "$_config"
fi
}
##################################################
-# Basic service stop and start
-basic_stop ()
+service_is_auto_started()
{
- case "$1" in
- nfs)
- if [ -n "$nfs_rquotad_service" ] ; then
- service "$nfs_rquotad_service" stop
- fi
+ [ "$1" = "AUTO" ]
+}
- service "$nfs_service" stop
+service_is_defined()
+{
+ _service="$1"
- if [ -n "$nfs_lock_service" ] ; then
- service "$nfs_lock_service" stop
- fi
- ;;
- nfslock)
- if [ -n "$nfs_lock_service" ] ; then
- service "$nfs_lock_service" stop
- else
- service "$nfs_service" stop
- fi
- ;;
- *)
- usage
- esac
+ [ -n "$_service" ] && ! service_is_auto_started "$_service"
}
-basic_start ()
+service_if_defined()
{
- case "$1" in
- nfs)
- if [ -n "$nfs_lock_service" ] ; then
- service "$nfs_lock_service" start
- fi
+ _service="$1"
+ _action="$2"
+
+ if service_is_defined "$_service"; then
+ service "$_service" "$_action"
+ fi
+}
- service "$nfs_service" start
+##################################################
+# Overall NFS service stop and start
- if [ -n "$nfs_rquotad_service" ] ; then
- service "$nfs_rquotad_service" start
- fi
+nfs_service_stop()
+{
+ service_if_defined "$nfs_rquotad_service" stop
+
+ service "$nfs_service" stop
+
+ service_if_defined "$nfs_lock_service" stop
+}
+
+nfs_service_start()
+{
+ service_if_defined "$nfs_lock_service" start
+
+ service "$nfs_service" start
+
+ service_if_defined "$nfs_rquotad_service" start
+}
+
+##################################################
+# service "stop" and "start" options for restarting
+
+manual_stop()
+{
+ case "$1" in
+ mountd)
+ killall -q -9 rpc.mountd
;;
- nfslock)
- if [ -n "$nfs_lock_service" ] ; then
- service "$nfs_lock_service" start
- else
- service "$nfs_service" start
- fi
+ rquotad)
+ killall -q -9 rpc.rquotad
+ ;;
+ status)
+ killall -q -9 rpc.statd
;;
*)
- usage
+ echo "$0: Internal error - invalid call to manual_stop()"
+ exit 1
+ ;;
esac
}
-##################################################
-# service "stop" and "start" options for restarting
+service_or_manual_stop()
+{
+ _rpc_service="$1"
+ _system_service="$2"
+
+ if service_is_defined "$_system_service"; then
+ service "$_system_service" stop
+ elif service_is_auto_started "$_system_service"; then
+ manual_stop "$_rpc_service"
+ fi
+}
-service_stop ()
+service_stop()
{
- case "$1" in
+ _rpc_service="$1"
+
+ case "$_rpc_service" in
nfs)
echo 0 >"${PROCFS_PATH}/fs/nfsd/threads"
- basic_stop "nfs" >/dev/null 2>&1 || true
+ nfs_service_stop >/dev/null 2>&1 || true
pkill -9 nfsd
;;
nlockmgr)
- basic_stop "nfslock" >/dev/null 2>&1 || true
+ if service_is_defined "$nfs_lock_service" ; then
+ service "$nfs_lock_service" stop >/dev/null 2>&1 || true
+ else
+ service "$nfs_service" stop >/dev/null 2>&1 || true
+ 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
+ ;;
esac
}
-service_start ()
+manual_start()
{
case "$1" in
- nfs)
- basic_start "nfs"
- ;;
- nlockmgr)
- basic_start "nfslock"
- ;;
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
+ if [ -z "$RPCMOUNTDOPTS" ]; then
RPCMOUNTDOPTS="${MOUNTD_PORT:+-p }$MOUNTD_PORT"
fi
# shellcheck disable=SC2086
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
+ if [ -z "$RPCRQUOTADOPTS" ]; then
RPCRQUOTADOPTS="${RQUOTAD_PORT:+-p }$RQUOTAD_PORT"
fi
# shellcheck disable=SC2086
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:-''}}"
- if [ -z "$opts" ] ; then
+ if [ -z "$opts" ]; then
# shellcheck disable=SC2086
set -- \
- ${STATD_HA_CALLOUT:+-H} $STATD_HA_CALLOUT \
- ${STATD_HOSTNAME:+-n} $STATD_HOSTNAME \
- ${STATD_PORT:+-p} $STATD_PORT \
- ${STATD_OUTGOING_PORT:+-o} $STATD_OUTGOING_PORT
+ ${STATD_HA_CALLOUT:+-H} $STATD_HA_CALLOUT \
+ ${STATD_HOSTNAME:+-n} $STATD_HOSTNAME \
+ ${STATD_PORT:+-p} $STATD_PORT \
+ ${STATD_OUTGOING_PORT:+-o} $STATD_OUTGOING_PORT
opts="$*"
fi
# shellcheck disable=SC2086
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 service_is_defined "$_system_service"; then
+ service "$_system_service" start
+ elif service_is_auto_started "$_system_service"; then
+ manual_start "$_rpc_service"
+ fi
+}
+
+service_start()
+{
+ _rpc_service="$1"
+
+ case "$_rpc_service" in
+ nfs)
+ nfs_service_start
+ ;;
+ nlockmgr)
+ if service_is_defined "$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
}
##################################################
# service init startup and final shutdown
-nfs_shutdown ()
+nfs_shutdown()
{
- basic_stop "nfs"
+ nfs_service_stop
}
-nfs_startup ()
+nfs_startup()
{
- basic_stop "nfs" || true
- basic_start "nfs"
- _f="${PROCFS_PATH}/sys/net/ipv4/tcp_tw_recycle"
- if [ -f "$_f" ] ; then
- echo 1 >"$_f"
- fi
+ nfs_service_stop || true
+ nfs_service_start
+ _f="${PROCFS_PATH}/sys/net/ipv4/tcp_tw_recycle"
+ if [ -f "$_f" ]; then
+ echo 1 >"$_f"
+ fi
}
##################################################
# monitor-post support
-nfs_check_thread_count ()
+nfs_check_thread_count()
{
- # Load NFS configuration to get desired number of threads.
- nfs_load_config
-
- # If $RPCNFSDCOUNT/$USE_KERNEL_NFSD_NUMBER isn't set then we could
- # guess the default from the initscript. However, let's just
- # assume that those using the default don't care about the number
- # of threads and that they have switched on this feature in error.
- _configured_threads="${RPCNFSDCOUNT:-${USE_KERNEL_NFSD_NUMBER}}"
- if [ -z "$_configured_threads" ] && type nfsconf >/dev/null 2>&1 ; then
- _configured_threads=$(nfsconf --get nfsd threads) || true
- fi
- [ -n "$_configured_threads" ] || return 0
-
- _threads_file="${PROCFS_PATH}/fs/nfsd/threads"
-
- # nfsd should be running the configured number of threads. If
- # there are a different number of threads then tell nfsd the
- # correct number.
- read _running_threads <"$_threads_file" || {
- echo "WARNING: Reading \"${_threads_file}\" unexpectedly failed"
- exit 0
- }
-
- # Intentionally not arithmetic comparison - avoids extra errors
- # when above read fails in an unexpected way...
- if [ "$_running_threads" != "$_configured_threads" ] ; then
- echo "Attempting to correct number of nfsd threads from ${_running_threads} to ${_configured_threads}"
- echo "$_configured_threads" >"$_threads_file"
- fi
+ # Load NFS configuration to get desired number of threads.
+ nfs_load_config
+
+ # If $RPCNFSDCOUNT/$USE_KERNEL_NFSD_NUMBER isn't set then we could
--
Samba Shared Repository
More information about the samba-cvs
mailing list