Author: todd
Date: Tue Apr 9 21:34:12 2013
New Revision: 1466253
URL: http://svn.apache.org/r1466253
Log:
HDFS-4643. Fix flakiness in TestQuorumJournalManager. Contributed by Todd
Lipcon.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/GenericTestUtils.java
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/GenericTestUtils.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/GenericTestUtils.java?rev=1466253&r1=1466252&r2=1466253&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/GenericTestUtils.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/GenericTestUtils.java
Tue Apr 9 21:34:12 2013
@@ -20,6 +20,9 @@ package org.apache.hadoop.test;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.lang.management.ThreadMXBean;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Random;
@@ -340,4 +343,23 @@ public abstract class GenericTestUtils {
Assert.assertTrue("Expected " + actual + " to be in range (" + expectedMin
+ ","
+ expectedMax + ")", expectedMin <= actual && actual <= expectedMax);
}
+
+ /**
+ * Assert that there are no threads running whose name matches the
+ * given regular expression.
+ * @param regex the regex to match against
+ */
+ public static void assertNoThreadsMatching(String regex) {
+ Pattern pattern = Pattern.compile(regex);
+ ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
+
+ ThreadInfo[] infos =
threadBean.getThreadInfo(threadBean.getAllThreadIds(), 20);
+ for (ThreadInfo info : infos) {
+ if (info == null) continue;
+ if (pattern.matcher(info.getThreadName()).matches()) {
+ Assert.fail("Leaked thread: " + info + "\n" +
+ Joiner.on("\n").join(info.getStackTrace()));
+ }
+ }
+ }
}