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 <martin@meltin.net>
Reviewed-by: Tim Beale <timbeale@catalyst.net.nz>
Autobuild-User(master): Tim Beale <timbeale@samba.org>
Autobuild-Date(master): Thu Nov 15 08:15:32 CET 2018 on sn-devel-144
echo "Checking output of hung script debugging..."
try_command_on_node -v $test_node cat "$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
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"
printf 'GOOD: output contains "%s"\n' "$pattern"
else
printf 'BAD: output does not contain "%s"\n' "$pattern"
pstree -p -a .*:
00\\\\.test\\\\.script,.*
*\`-sleep,.*
pstree -p -a .*:
00\\\\.test\\\\.script,.*
*\`-sleep,.*
----- Stack trace of interesting process [0-9]*\\\\[sleep\\\\] ----
-[<[0-9a-f]*>] .*sleep+.*
---- ctdb scriptstatus monitor: ----
00\\.test *TIMEDOUT.*
*OUTPUT: Sleeping for [0-9]* seconds\\\\.\\\\.\\\\.
---- ctdb scriptstatus monitor: ----
00\\.test *TIMEDOUT.*
*OUTPUT: Sleeping for [0-9]* seconds\\\\.\\\\.\\\\.