Repository: hbase Updated Branches: refs/heads/branch-1 60e7e6aed -> 5ee40c551
HBASE-12863 Master info port on RS UI is always 0 Signed-off-by: Enis Soztutar <e...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5ee40c55 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5ee40c55 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5ee40c55 Branch: refs/heads/branch-1 Commit: 5ee40c5516b0a05e95c8e4ef6c59065a108b1fa3 Parents: 60e7e6a Author: zhangduo <zhang...@wandoujia.com> Authored: Fri Jan 16 08:28:32 2015 +0800 Committer: Enis Soztutar <e...@apache.org> Committed: Fri Jan 16 11:00:42 2015 -0800 ---------------------------------------------------------------------- .../hbase/master/ActiveMasterManager.java | 10 ++-- .../org/apache/hadoop/hbase/master/HMaster.java | 27 +++++----- .../hbase/master/TestActiveMasterManager.java | 2 +- .../hadoop/hbase/master/TestGetInfoPort.java | 54 ++++++++++++++++++++ 4 files changed, 75 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/5ee40c55/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java index c69f671..efb1cfd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java @@ -56,7 +56,7 @@ public class ActiveMasterManager extends ZooKeeperListener { final AtomicBoolean clusterShutDown = new AtomicBoolean(false); private final ServerName sn; - private final int infoPort; + private int infoPort; private final Server master; /** @@ -64,14 +64,18 @@ public class ActiveMasterManager extends ZooKeeperListener { * @param sn ServerName * @param master In an instance of a Master. */ - ActiveMasterManager(ZooKeeperWatcher watcher, ServerName sn, int infoPort, Server master) { + ActiveMasterManager(ZooKeeperWatcher watcher, ServerName sn, Server master) { super(watcher); watcher.registerListener(this); this.sn = sn; - this.infoPort = infoPort; this.master = master; } + // will be set after jetty server is started + public void setInfoPort(int infoPort) { + this.infoPort = infoPort; + } + @Override public void nodeCreated(String path) { handle(path); http://git-wip-us.apache.org/repos/asf/hbase/blob/5ee40c55/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 4a33bcd..a4bd850 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -20,7 +20,6 @@ package org.apache.hadoop.hbase.master; import java.io.IOException; import java.io.InterruptedIOException; -import java.io.PrintWriter; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.net.InetAddress; @@ -223,7 +222,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { public static final String MASTER = "master"; // Manager and zk listener for master election - private ActiveMasterManager activeMasterManager; + private final ActiveMasterManager activeMasterManager; // Region server tracker RegionServerTracker regionServerTracker; // Draining region server tracker @@ -299,7 +298,6 @@ public class HMaster extends HRegionServer implements MasterServices, Server { /** jetty server for master to redirect requests to regionserver infoServer */ private org.mortbay.jetty.Server masterJettyServer; - private int masterInfoPort; public static class RedirectServlet extends HttpServlet { private static final long serialVersionUID = 2894774810058302472L; private static int regionServerInfoPort; @@ -377,19 +375,21 @@ public class HMaster extends HRegionServer implements MasterServices, Server { Threads.setDaemonThreadRunning(clusterStatusPublisherChore.getThread()); } } - startActiveMasterManager(); - putUpJettyServer(); + activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this); + int infoPort = putUpJettyServer(); + startActiveMasterManager(infoPort); } - private void putUpJettyServer() throws IOException { + // return the actual infoPort, -1 means disable info server. + private int putUpJettyServer() throws IOException { if (!conf.getBoolean("hbase.master.infoserver.redirect", true)) { - return; + return -1; } int infoPort = conf.getInt("hbase.master.info.port.orig", HConstants.DEFAULT_MASTER_INFOPORT); // -1 is for disabling info server, so no redirecting if (infoPort < 0 || infoServer == null) { - return; + return -1; } String addr = conf.get("hbase.master.info.bindAddress", "0.0.0.0"); if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) { @@ -415,7 +415,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } catch (Exception e) { throw new IOException("Failed to start redirecting jetty server", e); } - masterInfoPort = connector.getPort(); + return connector.getLocalPort(); } /** @@ -1379,7 +1379,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } } - private void startActiveMasterManager() throws KeeperException { + private void startActiveMasterManager(int infoPort) throws KeeperException { String backupZNode = ZKUtil.joinZNode( zooKeeper.backupMasterAddressesZNode, serverName.toString()); /* @@ -1394,12 +1394,11 @@ public class HMaster extends HRegionServer implements MasterServices, Server { */ LOG.info("Adding backup master ZNode " + backupZNode); if (!MasterAddressTracker.setMasterAddress(zooKeeper, backupZNode, - serverName, masterInfoPort)) { + serverName, infoPort)) { LOG.warn("Failed create of " + backupZNode + " by " + serverName); } - activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, - masterInfoPort, this); + activeMasterManager.setInfoPort(infoPort); // Start a thread to try to become the active master, so we won't block here Threads.setDaemonThreadRunning(new Thread(new Runnable() { @Override @@ -2224,7 +2223,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } } - List<TableName> result = new ArrayList(descriptors.size()); + List<TableName> result = new ArrayList<TableName>(descriptors.size()); for (HTableDescriptor htd: descriptors) { result.add(htd.getTableName()); } http://git-wip-us.apache.org/repos/asf/hbase/blob/5ee40c55/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java index 9a7351b..077b68b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java @@ -260,7 +260,7 @@ public class TestActiveMasterManager { clusterStatusTracker.start(); this.activeMasterManager = - new ActiveMasterManager(zk, master, 0, this); + new ActiveMasterManager(zk, master, this); zk.registerListener(activeMasterManager); } http://git-wip-us.apache.org/repos/asf/hbase/blob/5ee40c55/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestGetInfoPort.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestGetInfoPort.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestGetInfoPort.java new file mode 100644 index 0000000..40d129e --- /dev/null +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestGetInfoPort.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hbase.master; + +import static org.junit.Assert.assertTrue; + +import org.apache.hadoop.hbase.HBaseTestingUtility; +import org.apache.hadoop.hbase.HConstants; +import org.apache.hadoop.hbase.testclassification.MediumTests; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +/** + * Trivial test to confirm that we do not get 0 infoPort. See HBASE-12863. + */ +@Category({ MediumTests.class }) +public class TestGetInfoPort { + + private final HBaseTestingUtility testUtil = new HBaseTestingUtility(); + + @Before + public void setUp() throws Exception { + testUtil.getConfiguration().setInt(HConstants.MASTER_INFO_PORT, 0); + testUtil.startMiniCluster(1, 1); + } + + @After + public void tearDown() throws Exception { + testUtil.shutdownMiniCluster(); + } + + @Test + public void test() { + assertTrue(testUtil.getMiniHBaseCluster().getRegionServer(0).getMasterAddressTracker() + .getMasterInfoPort() > 0); + } +}