Repository: hbase
Updated Branches:
  refs/heads/branch-1.0 212cba16f -> 417f7a193


HBASE-13176 Flakey TestZooKeeper test.


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/417f7a19
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/417f7a19
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/417f7a19

Branch: refs/heads/branch-1.0
Commit: 417f7a1930478e61f5d6f9bd49312f6ea787dcfb
Parents: 212cba1
Author: Andrey Stepachev <oct...@gmail.com>
Authored: Tue Mar 17 15:00:10 2015 +0000
Committer: Andrey Stepachev <oct...@gmail.com>
Committed: Tue Mar 17 15:01:43 2015 +0000

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/TestZooKeeper.java  | 58 ++++++++++++++------
 1 file changed, 42 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/417f7a19/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java
index cdee735..190967d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java
@@ -36,7 +36,6 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.HTable;
@@ -45,6 +44,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Table;
+import org.apache.hadoop.hbase.coordination.ZkSplitLogWorkerCoordination;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.master.LoadBalancer;
 import org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer;
@@ -238,7 +238,7 @@ public class TestZooKeeper {
     MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
     HMaster m = cluster.getMaster();
     m.abort("Test recovery from zk session expired",
-      new KeeperException.SessionExpiredException());
+        new KeeperException.SessionExpiredException());
     assertTrue(m.isStopped()); // Master doesn't recover any more
     testSanity("testMasterZKSessionRecoveryFailure");
   }
@@ -253,7 +253,7 @@ public class TestZooKeeper {
     HColumnDescriptor family = new HColumnDescriptor("fam");
     desc.addFamily(family);
     LOG.info("Creating table " + tableName);
-    Admin admin = new HBaseAdmin(TEST_UTIL.getConfiguration());
+    Admin admin = TEST_UTIL.getHBaseAdmin();
     try {
       admin.createTable(desc);
     } finally {
@@ -491,24 +491,22 @@ public class TestZooKeeper {
     cluster.startRegionServer();
     cluster.waitForActiveAndReadyMaster(10000);
     HMaster m = cluster.getMaster();
-    ZooKeeperWatcher zkw = m.getZooKeeper();
-    int expectedNumOfListeners = zkw.getNumberOfListeners();
+    final ZooKeeperWatcher zkw = m.getZooKeeper();
     // now the cluster is up. So assign some regions.
-    Admin admin = new HBaseAdmin(TEST_UTIL.getConfiguration());
-    try {
+    try (Admin admin = TEST_UTIL.getHBaseAdmin()) {
       byte[][] SPLIT_KEYS = new byte[][] { Bytes.toBytes("a"), 
Bytes.toBytes("b"),
-        Bytes.toBytes("c"), Bytes.toBytes("d"), Bytes.toBytes("e"), 
Bytes.toBytes("f"),
-        Bytes.toBytes("g"), Bytes.toBytes("h"), Bytes.toBytes("i"), 
Bytes.toBytes("j") };
+          Bytes.toBytes("c"), Bytes.toBytes("d"), Bytes.toBytes("e"), 
Bytes.toBytes("f"),
+          Bytes.toBytes("g"), Bytes.toBytes("h"), Bytes.toBytes("i"), 
Bytes.toBytes("j") };
       String tableName = 
"testRegionAssignmentAfterMasterRecoveryDueToZKExpiry";
       HTableDescriptor htd = new 
HTableDescriptor(TableName.valueOf(tableName));
       htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));
       admin.createTable(htd, SPLIT_KEYS);
-      ZooKeeperWatcher zooKeeperWatcher = 
HBaseTestingUtility.getZooKeeperWatcher(TEST_UTIL);
-      ZKAssign.blockUntilNoRIT(zooKeeperWatcher);
+      TEST_UTIL.waitUntilNoRegionsInTransition(60000);
       m.getZooKeeper().close();
       MockLoadBalancer.retainAssignCalled = false;
+      final int expectedNumOfListeners = countPermanentListeners(zkw);
       m.abort("Test recovery from zk session expired",
-        new KeeperException.SessionExpiredException());
+          new KeeperException.SessionExpiredException());
       assertTrue(m.isStopped()); // Master doesn't recover any more
       // The recovered master should not call retainAssignment, as it is not a
       // clean startup.
@@ -516,12 +514,40 @@ public class TestZooKeeper {
       // number of listeners should be same as the value before master aborted
       // wait for new master is initialized
       cluster.waitForActiveAndReadyMaster(120000);
-      assertEquals(expectedNumOfListeners, zkw.getNumberOfListeners());
-    } finally {
-      admin.close();
+      final HMaster newMaster = cluster.getMasterThread().getMaster();
+      assertEquals(expectedNumOfListeners, 
countPermanentListeners(newMaster.getZooKeeper()));
+    }
+  }
+
+  /**
+   * Count listeners in zkw excluding listeners, that belongs to workers or 
other
+   * temporary processes.
+   */
+  private int countPermanentListeners(ZooKeeperWatcher watcher) {
+    return countListeners(watcher, ZkSplitLogWorkerCoordination.class);
+  }
+
+  /**
+   * Count listeners in zkw excluding provided classes
+   */
+  private int countListeners(ZooKeeperWatcher watcher, Class<?>... exclude) {
+    int cnt = 0;
+    for (Object o : watcher.getListeners()) {
+      boolean skip = false;
+      for (Class<?> aClass : exclude) {
+        if (aClass.isAssignableFrom(o.getClass())) {
+          skip = true;
+          break;
+        }
+      }
+      if (!skip) {
+        cnt += 1;
+      }
     }
+    return cnt;
   }
 
+
   /**
    * Tests whether the logs are split when master recovers from a expired 
zookeeper session and an
    * RS goes down.
@@ -533,7 +559,7 @@ public class TestZooKeeper {
     cluster.startRegionServer();
     HMaster m = cluster.getMaster();
     // now the cluster is up. So assign some regions.
-    Admin admin = new HBaseAdmin(TEST_UTIL.getConfiguration());
+    Admin admin = TEST_UTIL.getHBaseAdmin();
     Table table = null;
     try {
       byte[][] SPLIT_KEYS = new byte[][] { Bytes.toBytes("1"), 
Bytes.toBytes("2"),

Reply via email to