You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2013/03/26 17:56:24 UTC

svn commit: r1461228 - /hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java

Author: jxiang
Date: Tue Mar 26 16:56:23 2013
New Revision: 1461228

URL: http://svn.apache.org/r1461228
Log:
HBASE-7597 TestHBaseFsck#testRegionShouldNotBeDeployed seems to be flaky, v2

Modified:
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java?rev=1461228&r1=1461227&r2=1461228&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java Tue Mar 26 16:56:23 2013
@@ -34,7 +34,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
@@ -69,6 +73,7 @@ import org.apache.hadoop.hbase.master.As
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.master.RegionStates;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
@@ -79,14 +84,11 @@ import org.apache.hadoop.hbase.util.HBas
 import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;
 import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
 import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;
-import org.apache.hadoop.hbase.zookeeper.ZKAssign;
-import org.apache.hadoop.hbase.zookeeper.ZKTable;
-import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Test;
 import org.junit.Ignore;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
@@ -1095,9 +1097,6 @@ public class TestHBaseFsck {
       MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
       assertTrue(cluster.waitForActiveAndReadyMaster());
 
-      // Create a ZKW to use in the test
-      ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(TEST_UTIL);
-
       FileSystem filesystem = FileSystem.get(conf);
       Path rootdir = FSUtils.getRootDir(conf);
 
@@ -1114,52 +1113,26 @@ public class TestHBaseFsck {
 
       // Let's just assign everything to first RS
       HRegionServer hrs = cluster.getRegionServer(0);
-      ServerName serverName = hrs.getServerName();
 
-      // create region files.
+      // Create region files.
       TEST_UTIL.getHBaseAdmin().disableTable(table);
       TEST_UTIL.getHBaseAdmin().enableTable(table);
 
-      // Region of disable table was opened on RS
+      // Disable the table and close its regions
       TEST_UTIL.getHBaseAdmin().disableTable(table);
-      // Mess up ZKTable state, otherwise, can't open the region
-      ZKTable zkTable = cluster.getMaster().getAssignmentManager().getZKTable();
-      zkTable.setEnabledTable(table);
       HRegionInfo region = disabledRegions.remove(0);
       byte[] regionName = region.getRegionName();
 
       // The region should not be assigned currently
       assertTrue(cluster.getServerWith(regionName) == -1);
-      ZKAssign.createNodeOffline(zkw, region, serverName);
-      ProtobufUtil.openRegion(hrs, region);
 
-      int iTimes = 0;
-      while (true) {
-        if (cluster.getServerWith(regionName) != -1) {
-          List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs);
-          boolean found = false;
-          for (HRegionInfo hri: regions) {
-            if (Bytes.equals(hri.getRegionName(), regionName)) {
-              found = true;
-              break;
-            }
-          }
-          if (!found) {
-            LOG.info("Region was deployed but not in online " +
-              "region list. This should be transient. Waiting longer");
-          } else {
-            // Now, region is deployed, reset the table state back
-            zkTable.setDisabledTable(table);
-            break;
-          }
-        }
-        Thread.sleep(100);
-        iTimes++;
-        if (iTimes >= REGION_ONLINE_TIMEOUT) {
-          break;
-        }
-      }
-      assertTrue(iTimes < REGION_ONLINE_TIMEOUT);
+      // Directly open a region on a region server.
+      // If going through AM/ZK, the region won't be open.
+      // Even it is opened, AM will close it which causes
+      // flakiness of this test.
+      HRegion r = HRegion.openHRegion(
+        region, htdDisabled, hrs.getWAL(region), conf);
+      hrs.addToOnlineRegions(r);
 
       HBaseFsck hbck = doFsck(conf, false);
       assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.SHOULD_NOT_BE_DEPLOYED });