From e062b0b2977a6c07bfe9fe084dd0fc5d775b7b22 Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Wed, 14 Nov 2018 14:09:42 +1100 Subject: [PATCH] ctdb-tests: Make the debug hung script test cope with unreadable stacks Ideally this would just involve using "test -r". However, operating system security features may mean that kernel stacks are not readable even though they appear to be. Instead, try reading that stack of a process on the test node. If that succeeds then so should reading the stack of the "stuck" sleep process in the test. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13684 Signed-off-by: Martin Schwenke Reviewed-by: Tim Beale Autobuild-User(master): Tim Beale Autobuild-Date(master): Thu Nov 15 08:15:32 CET 2018 on sn-devel-144 (cherry picked from commit c1dd6382e3211792e313f7d559b943f55c9cb0e1) --- ctdb/tests/complex/90_debug_hung_script.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ctdb/tests/complex/90_debug_hung_script.sh b/ctdb/tests/complex/90_debug_hung_script.sh index b2518df6fdb..ec559e2b37c 100755 --- a/ctdb/tests/complex/90_debug_hung_script.sh +++ b/ctdb/tests/complex/90_debug_hung_script.sh @@ -72,9 +72,21 @@ wait_until 60 onnode $test_node test -s "$debug_output" echo "Checking output of hung script debugging..." try_command_on_node -v $test_node cat "$debug_output" +hung_script_output="$out" + +# Can we actually read kernel stacks +if try_command_on_node $test_node "cat /proc/$$/stack >/dev/null 2>&1" ; then + stackpat=' +---- Stack trace of interesting process [0-9]*\\[sleep\\] ---- +[<[0-9a-f]*>] .*sleep+.* +' +else + stackpat='' +fi while IFS="" read pattern ; do - if grep -- "^${pattern}\$" <<<"$out" >/dev/null ; then + [ -n "$pattern" ] || continue + if grep -- "^${pattern}\$" <<<"$hung_script_output" >/dev/null ; then echo "GOOD: output contains \"$pattern\"" else echo "BAD: output does not contain \"$pattern\"" @@ -86,8 +98,7 @@ done <<'EOF' pstree -p -a .*: 99\\.timeout,.* /etc/ctdb/events.d/99.timeout monitor *\`-sleep,.* ----- Stack trace of interesting process [0-9]*\\[sleep\\] ---- -[<[0-9a-f]*>] .*sleep+.* +${stackpat} ---- ctdb scriptstatus monitor: ---- 99\\.timeout *TIMEDOUT.* *OUTPUT: sleeping for [0-9]* seconds\\.\\.\\. -- 2.19.1