ctdb-scripts: Dump stack traces of smbd processes after shutdown
authorMartin Schwenke <martin@meltin.net>
Thu, 6 Oct 2016 00:14:09 +0000 (11:14 +1100)
committerAmitay Isaacs <amitay@samba.org>
Mon, 10 Oct 2016 10:54:24 +0000 (12:54 +0200)
If any processes remain then they may be stuck in D state and this
might tell us why.

Update tests: tweak pidof stub, add support for smbd stack traces and
add some new tests for the shutdown event.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Mon Oct 10 12:54:24 CEST 2016 on sn-devel-144

ctdb/config/events.d/50.samba
ctdb/tests/eventscripts/50.samba.shutdown.001.sh [new file with mode: 0755]
ctdb/tests/eventscripts/50.samba.shutdown.002.sh [new file with mode: 0755]
ctdb/tests/eventscripts/scripts/local.sh
ctdb/tests/eventscripts/stubs/pidof

index b521d00858f316b50733b7d39acf14e1d7410ba3..4ed892cdc5905e3efaa45e9441109a59e781c2f7 100755 (executable)
@@ -65,6 +65,7 @@ service_start ()
 service_stop ()
 {
     service "$CTDB_SERVICE_SMB" stop
+    program_stack_traces "smbd" 5
     if [ -n "$CTDB_SERVICE_NMB" ] ; then
        service "$CTDB_SERVICE_NMB" stop
     fi
diff --git a/ctdb/tests/eventscripts/50.samba.shutdown.001.sh b/ctdb/tests/eventscripts/50.samba.shutdown.001.sh
new file mode 100755 (executable)
index 0000000..8c0be7c
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "shutdown, simple"
+
+setup_samba
+
+ok <<EOF
+Stopping smb: OK
+EOF
+simple_test
diff --git a/ctdb/tests/eventscripts/50.samba.shutdown.002.sh b/ctdb/tests/eventscripts/50.samba.shutdown.002.sh
new file mode 100755 (executable)
index 0000000..7ead53c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "shutdown, simple"
+
+setup_samba
+
+samba_setup_fake_threads 1 2 3 4 5 6
+
+ok <<EOF
+Stopping smb: OK
+$SAMBA_STACK_TRACES
+EOF
+simple_test
index 61a033a1b6cce9aa38cdc870cd5b0a64a5569748..ea900ebcd0d8c99e32ef48af9915c9c46b843bb6 100644 (file)
@@ -839,6 +839,23 @@ setup_samba ()
     fi
 }
 
+samba_setup_fake_threads ()
+{
+       export FAKE_SMBD_THREAD_PIDS="$*"
+
+       _nl="
+"
+       _out=""
+       _count=0
+       for _pid ; do
+               [ "$_count" -lt 5 ] || break
+               _t=$(program_stack_trace "smbd" $_pid)
+               _out="${_out:+${_out}${_nl}}${_t}"
+               _count=$((_count + 1))
+       done
+       SAMBA_STACK_TRACES="$_out"
+}
+
 setup_winbind ()
 {
     setup_ctdb
@@ -999,6 +1016,17 @@ nfs_setup_fake_threads ()
     esac
 }
 
+program_stack_trace ()
+{
+       _prog="$1"
+       _pid="$2"
+
+       cat <<EOF
+Stack trace for ${_prog}[${_pid}]:
+[<ffffffff87654321>] fake_stack_trace_for_pid_${_pid}/stack+0x0/0xff
+EOF
+}
+
 program_stack_traces ()
 {
     _prog="$1"
@@ -1008,10 +1036,7 @@ program_stack_traces ()
     for _pid in ${FAKE_NFSD_THREAD_PIDS:-$FAKE_RPC_THREAD_PIDS} ; do
        [ $_count -le $_max ] || break
 
-       cat <<EOF
-Stack trace for ${_prog}[${_pid}]:
-[<ffffffff87654321>] fake_stack_trace_for_pid_${_pid}/stack+0x0/0xff
-EOF
+       program_stack_trace "$_prog" "$_pid"
        _count=$(($_count + 1))
     done
 }
index b84aef0acdaede90811f80e1516418bf0490239a..8b57923d0bad0d58d986deeecfe77d0752a21e84 100755 (executable)
@@ -1,12 +1,15 @@
 #!/bin/sh
 
 case "$1" in
-    nfsd)
+nfsd)
        echo "$FAKE_NFSD_THREAD_PIDS"
        ;;
-    rpc.statd|rpc.rquotad|rpc.mountd)
+rpc.statd|rpc.rquotad|rpc.mountd)
        echo "$FAKE_RPC_THREAD_PIDS"
        ;;
+smbd)
+       echo "$FAKE_SMBD_THREAD_PIDS"
+       ;;
     *)
        echo "pidof: \"$1\" not implemented"
        exit 1