HADOOP-8894. GenericTestUtils.waitFor should dump thread stacks on timeout. Contributed by Todd Lipcon.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1395826 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2715385c4e
commit
5a5fd34169
|
@ -35,6 +35,9 @@ Release 2.0.3-alpha - Unreleased
|
||||||
HADOOP-8804. Improve Web UIs when the wildcard address is used.
|
HADOOP-8804. Improve Web UIs when the wildcard address is used.
|
||||||
(Senthil Kumar via eli)
|
(Senthil Kumar via eli)
|
||||||
|
|
||||||
|
HADOOP-8894. GenericTestUtils.waitFor should dump thread stacks on timeout
|
||||||
|
(todd)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). (Andrew Wang
|
HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). (Andrew Wang
|
||||||
|
|
|
@ -104,7 +104,10 @@ public abstract class GenericTestUtils {
|
||||||
|
|
||||||
Thread.sleep(checkEveryMillis);
|
Thread.sleep(checkEveryMillis);
|
||||||
} while (Time.now() - st < waitForMillis);
|
} while (Time.now() - st < waitForMillis);
|
||||||
throw new TimeoutException("Timed out waiting for condition");
|
|
||||||
|
throw new TimeoutException("Timed out waiting for condition. " +
|
||||||
|
"Thread diagnostics:\n" +
|
||||||
|
TimedOutTestsListener.buildThreadDiagnosticString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class LogCapturer {
|
public static class LogCapturer {
|
||||||
|
|
|
@ -58,19 +58,28 @@ public class TimedOutTestsListener extends RunListener {
|
||||||
&& failure.getMessage().startsWith(TEST_TIMED_OUT_PREFIX)) {
|
&& failure.getMessage().startsWith(TEST_TIMED_OUT_PREFIX)) {
|
||||||
output.println("====> TEST TIMED OUT. PRINTING THREAD DUMP. <====");
|
output.println("====> TEST TIMED OUT. PRINTING THREAD DUMP. <====");
|
||||||
output.println();
|
output.println();
|
||||||
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,SSS");
|
output.print(buildThreadDiagnosticString());
|
||||||
output.println(String.format("Timestamp: %s", dateFormat.format(new Date())));
|
|
||||||
output.println();
|
|
||||||
output.println(buildThreadDump());
|
|
||||||
|
|
||||||
String deadlocksInfo = buildDeadlockInfo();
|
|
||||||
if (deadlocksInfo != null) {
|
|
||||||
output.println("====> DEADLOCKS DETECTED <====");
|
|
||||||
output.println();
|
|
||||||
output.println(deadlocksInfo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String buildThreadDiagnosticString() {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
PrintWriter output = new PrintWriter(sw);
|
||||||
|
|
||||||
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,SSS");
|
||||||
|
output.println(String.format("Timestamp: %s", dateFormat.format(new Date())));
|
||||||
|
output.println();
|
||||||
|
output.println(buildThreadDump());
|
||||||
|
|
||||||
|
String deadlocksInfo = buildDeadlockInfo();
|
||||||
|
if (deadlocksInfo != null) {
|
||||||
|
output.println("====> DEADLOCKS DETECTED <====");
|
||||||
|
output.println();
|
||||||
|
output.println(deadlocksInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sw.toString();
|
||||||
|
}
|
||||||
|
|
||||||
static String buildThreadDump() {
|
static String buildThreadDump() {
|
||||||
StringBuilder dump = new StringBuilder();
|
StringBuilder dump = new StringBuilder();
|
||||||
|
|
Loading…
Reference in New Issue