From 1882b2b9ca7e4d7d5028b7b573c0fcf02ba5f8cc 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/simple/90_debug_hung_script.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ctdb/tests/simple/90_debug_hung_script.sh b/ctdb/tests/simple/90_debug_hung_script.sh index 846188fc716..8b8e22b3239 100755 --- a/ctdb/tests/simple/90_debug_hung_script.sh +++ b/ctdb/tests/simple/90_debug_hung_script.sh @@ -61,9 +61,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 printf 'GOOD: output contains "%s"\n' "$pattern" else printf 'BAD: output does not contain "%s"\n' "$pattern" @@ -75,8 +87,7 @@ done <] .*sleep+.* +${stackpat} ---- ctdb scriptstatus monitor: ---- 00\\.test *TIMEDOUT.* *OUTPUT: Sleeping for [0-9]* seconds\\\\.\\\\.\\\\. -- 2.19.1