You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2017/11/15 15:14:19 UTC

[2/2] hbase git commit: HBASE-19248 Move tests that need to look at Connection internals to test of said internals.

HBASE-19248 Move tests that need to look at Connection internals to test of said internals.

Signed-off-by: zhangduo <zh...@apache.org>
Signed-off-by: Chia-Ping Tsai <ch...@gmail.com>


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

Branch: refs/heads/branch-2
Commit: 9c85d0017f1452f266253d64fde8d513eb571f75
Parents: a1d86d9
Author: Sean Busbey <bu...@apache.org>
Authored: Mon Nov 13 18:52:33 2017 -0600
Committer: Sean Busbey <bu...@apache.org>
Committed: Wed Nov 15 08:40:03 2017 -0600

----------------------------------------------------------------------
 .../hadoop/hbase/client/ZKAsyncRegistry.java    |  10 +-
 .../org/apache/hadoop/hbase/TestZooKeeper.java  | 121 -------------------
 .../hbase/client/TestZKAsyncRegistry.java       |  22 ++++
 3 files changed, 30 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/9c85d001/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java
index fedd527..e36de01 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ZKAsyncRegistry.java
@@ -44,6 +44,9 @@ import org.apache.hadoop.hbase.RegionLocations;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.master.RegionState;
+import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.zookeeper.ZKConfig;
@@ -51,8 +54,6 @@ import org.apache.hadoop.hbase.zookeeper.ZNodePaths;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.zookeeper.data.Stat;
 
-import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos;
 
 /**
  * Fetch the registry data from zookeeper.
@@ -115,6 +116,11 @@ class ZKAsyncRegistry implements AsyncRegistry {
     return exec(zk.getData(), znodePaths.clusterIdZNode, ZKAsyncRegistry::getClusterId);
   }
 
+  @VisibleForTesting
+  CuratorFramework getCuratorFramework() {
+    return zk;
+  }
+
   private static ZooKeeperProtos.MetaRegionServer getMetaProto(CuratorEvent event)
       throws IOException {
     byte[] data = event.getData();

http://git-wip-us.apache.org/repos/asf/hbase/blob/9c85d001/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 f75c7a4..d546d5d 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
@@ -26,8 +26,6 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
 
@@ -35,9 +33,6 @@ import org.apache.commons.logging.Log;
 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.Connection;
-import org.apache.hadoop.hbase.client.ConnectionFactory;
-import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.Result;
@@ -61,15 +56,12 @@ import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.ZooDefs;
 import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.ZooKeeper.States;
 import org.apache.zookeeper.data.ACL;
 import org.apache.zookeeper.data.Stat;
 import org.junit.After;
 import org.junit.AfterClass;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -131,92 +123,6 @@ public class TestZooKeeper {
     }
   }
 
-  private ZooKeeperWatcher getZooKeeperWatcher(Connection c)
-  throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-    Method getterZK = c.getClass().getDeclaredMethod("getKeepAliveZooKeeperWatcher");
-    getterZK.setAccessible(true);
-    return (ZooKeeperWatcher) getterZK.invoke(c);
-  }
-
-
-  /**
-   * See HBASE-1232 and http://hbase.apache.org/book.html#trouble.zookeeper.
-   * @throws IOException
-   * @throws InterruptedException
-   */
-  @Ignore("fails frequently, disabled for now, see HBASE-6406")
-  @Test
-  public void testClientSessionExpired() throws Exception {
-    Configuration c = new Configuration(TEST_UTIL.getConfiguration());
-
-    // We don't want to share the connection as we will check its state
-    c.set(HConstants.HBASE_CLIENT_INSTANCE_ID, "1111");
-
-    Connection connection = ConnectionFactory.createConnection(c);
-
-    ZooKeeperWatcher connectionZK = getZooKeeperWatcher(connection);
-    LOG.info("ZooKeeperWatcher= 0x"+ Integer.toHexString(
-      connectionZK.hashCode()));
-    LOG.info("getRecoverableZooKeeper= 0x"+ Integer.toHexString(
-      connectionZK.getRecoverableZooKeeper().hashCode()));
-    LOG.info("session="+Long.toHexString(
-      connectionZK.getRecoverableZooKeeper().getSessionId()));
-
-    TEST_UTIL.expireSession(connectionZK);
-
-    LOG.info("Before using zkw state=" +
-      connectionZK.getRecoverableZooKeeper().getState());
-    // provoke session expiration by doing something with ZK
-    try {
-      connectionZK.getRecoverableZooKeeper().getZooKeeper().exists(
-        "/1/1", false);
-    } catch (KeeperException ignored) {
-    }
-
-    // Check that the old ZK connection is closed, means we did expire
-    States state = connectionZK.getRecoverableZooKeeper().getState();
-    LOG.info("After using zkw state=" + state);
-    LOG.info("session="+Long.toHexString(
-      connectionZK.getRecoverableZooKeeper().getSessionId()));
-
-    // It's asynchronous, so we may have to wait a little...
-    final long limit1 = System.currentTimeMillis() + 3000;
-    while (System.currentTimeMillis() < limit1 && state != States.CLOSED){
-      state = connectionZK.getRecoverableZooKeeper().getState();
-    }
-    LOG.info("After using zkw loop=" + state);
-    LOG.info("ZooKeeper should have timed out");
-    LOG.info("session="+Long.toHexString(
-      connectionZK.getRecoverableZooKeeper().getSessionId()));
-
-    // It's surprising but sometimes we can still be in connected state.
-    // As it's known (even if not understood) we don't make the the test fail
-    // for this reason.)
-    // Assert.assertTrue("state=" + state, state == States.CLOSED);
-
-    // Check that the client recovered
-    ZooKeeperWatcher newConnectionZK = getZooKeeperWatcher(connection);
-
-    States state2 = newConnectionZK.getRecoverableZooKeeper().getState();
-    LOG.info("After new get state=" +state2);
-
-    // As it's an asynchronous event we may got the same ZKW, if it's not
-    //  yet invalidated. Hence this loop.
-    final long limit2 = System.currentTimeMillis() + 3000;
-    while (System.currentTimeMillis() < limit2 &&
-      state2 != States.CONNECTED && state2 != States.CONNECTING) {
-
-      newConnectionZK = getZooKeeperWatcher(connection);
-      state2 = newConnectionZK.getRecoverableZooKeeper().getState();
-    }
-    LOG.info("After new get state loop=" + state2);
-
-    Assert.assertTrue(
-      state2 == States.CONNECTED || state2 == States.CONNECTING);
-
-    connection.close();
-  }
-
   @Test (timeout = 120000)
   public void testRegionServerSessionExpired() throws Exception {
     LOG.info("Starting " + name.getMethodName());
@@ -272,33 +178,6 @@ public class TestZooKeeper {
     table.close();
   }
 
-  @Test
-  public void testMultipleZK()
-  throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
-    Table localMeta = TEST_UTIL.getConnection().getTable(TableName.META_TABLE_NAME);
-    Configuration otherConf = new Configuration(TEST_UTIL.getConfiguration());
-    otherConf.set(HConstants.ZOOKEEPER_QUORUM, "127.0.0.1");
-    Connection connection = ConnectionFactory.createConnection(otherConf);
-    Table ipMeta = connection.getTable(TableName.META_TABLE_NAME);
-
-    // dummy, just to open the connection
-    final byte [] row = new byte [] {'r'};
-    localMeta.exists(new Get(row));
-    ipMeta.exists(new Get(row));
-
-    // make sure they aren't the same
-    ZooKeeperWatcher z1 =
-      getZooKeeperWatcher(ConnectionFactory.createConnection(localMeta.getConfiguration()));
-    ZooKeeperWatcher z2 =
-      getZooKeeperWatcher(ConnectionFactory.createConnection(otherConf));
-    assertFalse(z1 == z2);
-    assertFalse(z1.getQuorum().equals(z2.getQuorum()));
-
-    localMeta.close();
-    ipMeta.close();
-    connection.close();
-  }
-
   /**
    * Create a znode with data
    * @throws Exception

http://git-wip-us.apache.org/repos/asf/hbase/blob/9c85d001/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestZKAsyncRegistry.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestZKAsyncRegistry.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestZKAsyncRegistry.java
index b092a25..a8a7de0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestZKAsyncRegistry.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestZKAsyncRegistry.java
@@ -19,7 +19,9 @@ package org.apache.hadoop.hbase.client;
 
 import static org.apache.hadoop.hbase.HConstants.META_REPLICAS_NUM;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -28,7 +30,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.IntStream;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.curator.CuratorZookeeperClient;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.RegionLocations;
 import org.apache.hadoop.hbase.TableName;
@@ -108,4 +113,21 @@ public class TestZKAsyncRegistry {
       assertEquals(i, loc.getRegionInfo().getReplicaId());
     });
   }
+
+  @Test
+  public void testIndependentZKConnections() throws IOException {
+    final CuratorZookeeperClient zk1 = REGISTRY.getCuratorFramework().getZookeeperClient();
+
+    final Configuration otherConf = new Configuration(TEST_UTIL.getConfiguration());
+    otherConf.set(HConstants.ZOOKEEPER_QUORUM, "127.0.0.1");
+    try (final ZKAsyncRegistry otherRegistry = new ZKAsyncRegistry(otherConf)) {
+      final CuratorZookeeperClient zk2 = otherRegistry.getCuratorFramework().getZookeeperClient();
+
+      assertNotSame("Using a different configuration / quorum should result in different backing " +
+          "zk connection.", zk1, zk2);
+      assertNotEquals("Using a different configrution / quorum should be reflected in the " +
+          "zk connection.", zk1.getCurrentConnectionString(), zk2.getCurrentConnectionString());
+    }
+  }
+
 }