You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2013/03/27 19:56:01 UTC
svn commit: r1461797 - in
/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase:
HBaseTestingUtility.java master/TestTableLockManager.java
Author: tedyu
Date: Wed Mar 27 18:56:01 2013
New Revision: 1461797
URL: http://svn.apache.org/r1461797
Log:
HBASE-8164 TestTableLockManager fails intermittently in trunk builds (Ted Yu)
Modified:
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java?rev=1461797&r1=1461796&r2=1461797&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java Wed Mar 27 18:56:01 2013
@@ -1920,6 +1920,41 @@ public class HBaseTestingUtility extends
closeRegion(hrl.getRegionInfo().getRegionName());
}
+ /*
+ * Retrieves a splittable region randomly from tableName
+ *
+ * @param tableName name of table
+ * @param maxAttempts maximum number of attempts, unlimited for value of -1
+ * @return the HRegion chosen, null if none was found within limit of maxAttempts
+ */
+ public HRegion getSplittableRegion(byte[] tableName, int maxAttempts) {
+ List<HRegion> regions = getHBaseCluster().getRegions(tableName);
+ int regCount = regions.size();
+ Set<Integer> attempted = new HashSet<Integer>();
+ int idx;
+ int attempts = 0;
+ do {
+ regions = getHBaseCluster().getRegions(tableName);
+ if (regCount != regions.size()) {
+ // if there was region movement, clear attempted Set
+ attempted.clear();
+ }
+ regCount = regions.size();
+ idx = random.nextInt(regions.size());
+ // if we have just tried this region, there is no need to try again
+ if (attempted.contains(idx)) continue;
+ try {
+ regions.get(idx).checkSplit();
+ return regions.get(idx);
+ } catch (Exception ex) {
+ LOG.warn("Caught exception", ex);
+ attempted.add(idx);
+ }
+ attempts++;
+ } while (maxAttempts == -1 || attempts < maxAttempts);
+ return null;
+ }
+
public MiniZooKeeperCluster getZkCluster() {
return zkCluster;
}
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java?rev=1461797&r1=1461796&r2=1461797&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java Wed Mar 27 18:56:01 2013
@@ -25,8 +25,10 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.fail;
import java.io.IOException;
+import java.util.HashSet;
import java.util.List;
import java.util.Random;
+import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
@@ -353,9 +355,8 @@ public class TestTableLockManager {
@Override
public void chore() {
try {
- Random random = new Random();
- List<HRegionInfo> regions = admin.getTableRegions(tableName);
- byte[] regionName = regions.get(random.nextInt(regions.size())).getRegionName();
+ HRegion region = TEST_UTIL.getSplittableRegion(tableName, -1);
+ byte[] regionName = region.getRegionName();
admin.flush(regionName);
admin.compact(regionName);
admin.split(regionName);