Repository: knox Updated Branches: refs/heads/master 8257ed443 -> 84aa9565f
KNOX-1239 - HBaseZookeeperURLManager ignores configured ZooKeeper namespace Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/84aa9565 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/84aa9565 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/84aa9565 Branch: refs/heads/master Commit: 84aa9565f6ada9f991f0184815f4ba2f04c2fdfe Parents: 8257ed4 Author: Phil Zampino <[email protected]> Authored: Thu Apr 5 10:47:27 2018 -0400 Committer: Phil Zampino <[email protected]> Committed: Thu Apr 5 10:47:27 2018 -0400 ---------------------------------------------------------------------- .../provider/impl/BaseZookeeperURLManager.java | 12 +++-- .../provider/impl/HBaseZookeeperURLManager.java | 31 +++++++---- .../impl/HBaseZookeeperURLManagerTest.java | 54 +++++++++++++++----- 3 files changed, 72 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/84aa9565/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/BaseZookeeperURLManager.java ---------------------------------------------------------------------- diff --git a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/BaseZookeeperURLManager.java b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/BaseZookeeperURLManager.java index 2b18fc1..868fda8 100644 --- a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/BaseZookeeperURLManager.java +++ b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/BaseZookeeperURLManager.java @@ -49,6 +49,7 @@ public abstract class BaseZookeeperURLManager implements URLManager { private static final int TIMEOUT = 2000; private String zooKeeperEnsemble; + private String zooKeeperNamespace; private ConcurrentLinkedQueue<String> urls = new ConcurrentLinkedQueue<String>(); // ------------------------------------------------------------------------------------- @@ -65,13 +66,14 @@ public abstract class BaseZookeeperURLManager implements URLManager { if (zookeeperEnsemble != null && zookeeperEnsemble.trim().length() > 0) { return true; } - + return false; } @Override public void setConfig(HaServiceConfig config) { - zooKeeperEnsemble = config.getZookeeperEnsemble(); + zooKeeperEnsemble = config.getZookeeperEnsemble(); + zooKeeperNamespace = config.getZookeeperNamespace(); setURLs(lookupURLs()); } @@ -138,7 +140,11 @@ public abstract class BaseZookeeperURLManager implements URLManager { protected String getZookeeperEnsemble() { return zooKeeperEnsemble; } - + + protected String getZookeeperNamespace() { + return zooKeeperNamespace; + } + /** * Validate access to hosts using simple light weight ping style REST call. * http://git-wip-us.apache.org/repos/asf/knox/blob/84aa9565/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManager.java ---------------------------------------------------------------------- diff --git a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManager.java b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManager.java index 461ea98..d2053cd 100644 --- a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManager.java +++ b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManager.java @@ -43,9 +43,9 @@ public class HBaseZookeeperURLManager extends BaseZookeeperURLManager { * Default Port Number for HBase REST Server */ private static final int PORT_NUMBER = 8080; - - private String zookeeperNamespace = "hbase-unsecure"; - + + private static final String DEFAULT_ZOOKEEPER_NAMESPACE = "/hbase-unsecure"; + // ------------------------------------------------------------------------------------- // Abstract methods // ------------------------------------------------------------------------------------- @@ -75,6 +75,12 @@ public class HBaseZookeeperURLManager extends BaseZookeeperURLManager { return "WEBHBASE"; }; + @Override + protected String getZookeeperNamespace() { + String ns = super.getZookeeperNamespace(); + return (ns == null || ns.isEmpty()) ? DEFAULT_ZOOKEEPER_NAMESPACE : ns; + } + // ------------------------------------------------------------------------------------- // Private methods // ------------------------------------------------------------------------------------- @@ -86,16 +92,21 @@ public class HBaseZookeeperURLManager extends BaseZookeeperURLManager { { List<String> serverHosts = new ArrayList<>(); - CuratorFramework zooKeeperClient = CuratorFrameworkFactory.builder() - .connectString(getZookeeperEnsemble()) - .retryPolicy(new ExponentialBackoffRetry(1000, 3)) - .build(); - + CuratorFramework zooKeeperClient = + CuratorFrameworkFactory.builder().connectString(getZookeeperEnsemble()) + .retryPolicy(new ExponentialBackoffRetry(1000, 3)) + .build(); + try { zooKeeperClient.start(); - + + String namespace = getZookeeperNamespace(); + if (!namespace.startsWith("/")) { + namespace = "/" + namespace; + } + // Retrieve list of all region server hosts - List<String> serverNodes = zooKeeperClient.getChildren().forPath("/" + zookeeperNamespace + "/rs"); + List<String> serverNodes = zooKeeperClient.getChildren().forPath(namespace + "/rs"); for (String serverNode : serverNodes) { String serverURL = constructURL(serverNode); http://git-wip-us.apache.org/repos/asf/knox/blob/84aa9565/gateway-provider-ha/src/test/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManagerTest.java ---------------------------------------------------------------------- diff --git a/gateway-provider-ha/src/test/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManagerTest.java b/gateway-provider-ha/src/test/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManagerTest.java index b08576d..1869890 100644 --- a/gateway-provider-ha/src/test/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManagerTest.java +++ b/gateway-provider-ha/src/test/java/org/apache/knox/gateway/ha/provider/impl/HBaseZookeeperURLManagerTest.java @@ -31,28 +31,24 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.fail; + /** * Simple unit tests for HBaseZookeeperURLManager. * * @see HBaseZookeeperURLManager */ public class HBaseZookeeperURLManagerTest { - + + private static final String UNSECURE_NS = "/hbase-unsecure"; + private static final String SECURE_NS = "/hbase-secure"; + private TestingCluster cluster; @Before public void setup() throws Exception { cluster = new TestingCluster(3); cluster.start(); - - CuratorFramework zooKeeperClient = - CuratorFrameworkFactory.builder().connectString(cluster.getConnectString()) - .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build(); - - zooKeeperClient.start(); - zooKeeperClient.create().forPath("/hbase-unsecure"); - zooKeeperClient.create().forPath("/hbase-unsecure/rs"); - zooKeeperClient.close(); } @After @@ -61,12 +57,46 @@ public class HBaseZookeeperURLManagerTest { } @Test - public void testHBaseZookeeperURLManagerLoading() { + public void testHBaseZookeeperURLManagerLoading() throws Exception { + createZNodes(UNSECURE_NS); + doTest(null); + } + + @Test + public void testSecureNSHBaseZookeeperURLManagerLoading() throws Exception { + createZNodes(SECURE_NS); + doTest(SECURE_NS); + } + + @Test + public void testSecureNSHBaseZookeeperURLManagerLoadingNoLeadingSlash() throws Exception { + createZNodes(SECURE_NS); + doTest(SECURE_NS.substring(1)); // Omit the leading slash from the namespace + } + + private void doTest(String namespace) throws Exception { HaServiceConfig config = new DefaultHaServiceConfig("WEBHBASE"); config.setEnabled(true); config.setZookeeperEnsemble(cluster.getConnectString()); - URLManager manager = URLManagerLoader.loadURLManager(config); + config.setZookeeperNamespace(namespace); + URLManager manager = null; + try { + manager = URLManagerLoader.loadURLManager(config); + } catch (Exception e) { + fail(e.getMessage()); + } Assert.assertNotNull(manager); Assert.assertTrue(manager instanceof HBaseZookeeperURLManager); } + + private void createZNodes(String namespace) throws Exception { + CuratorFramework zooKeeperClient = + CuratorFrameworkFactory.builder().connectString(cluster.getConnectString()) + .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build(); + zooKeeperClient.start(); + zooKeeperClient.create().forPath(namespace); + zooKeeperClient.create().forPath(namespace + "/rs"); + zooKeeperClient.close(); + } + }
