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

Reply via email to