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);