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());
+ }
+ }
+
}