You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2013/06/24 22:31:33 UTC

svn commit: r1496201 - in /hbase/branches/0.95/hbase-server/src: main/jamon/org/apache/hadoop/hbase/tmpl/master/ main/java/org/apache/hadoop/hbase/master/ test/java/org/apache/hadoop/hbase/master/

Author: larsh
Date: Mon Jun 24 20:31:33 2013
New Revision: 1496201

URL: http://svn.apache.org/r1496201
Log:
HBASE-5083 Backup HMaster should have http infoport open with link to the active master (Cody Marcel)

Modified:
    hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/BackupMasterListTmpl.jamon
    hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
    hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java

Modified: hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/BackupMasterListTmpl.jamon
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/BackupMasterListTmpl.jamon?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/BackupMasterListTmpl.jamon (original)
+++ hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/BackupMasterListTmpl.jamon Mon Jun 24 20:31:33 2013
@@ -1,69 +0,0 @@
-<%doc>
-Copyright The Apache Software Foundation
-
-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.
- </%doc>
-
-<%args>
-HMaster master;
-</%args>
-
-<%import>
-        java.util.*;
-        org.apache.hadoop.util.StringUtils;
-        org.apache.hadoop.hbase.util.Bytes;
-        org.apache.hadoop.hbase.master.HMaster;
-        org.apache.hadoop.hbase.HConstants;
-        org.apache.hadoop.hbase.ServerName;
-        org.apache.hadoop.hbase.ClusterStatus;
-</%import>
-
-<%java>
-Collection<ServerName> backupMasters = null;
-if (master.isActiveMaster()) {
-    ClusterStatus status = master.getClusterStatus();
-    backupMasters = status.getBackupMasters();
-}
-</%java>
-
-<table class="table table-striped">
-<%if (backupMasters != null && backupMasters.size() > 0)%>
-<tr>
-    <th>ServerName</th>
-    <th>Port</th>
-    <th>Start Time</th>
-</tr>
-<%java>
-    ServerName [] serverNames = backupMasters.toArray(new ServerName[backupMasters.size()]);
-    Arrays.sort(serverNames);
-    for (ServerName serverName: serverNames) {
-</%java>
-<tr>
-    <td><% serverName.getHostname() %></td>
-    <td><% serverName.getPort() %></td>
-    <td><% new Date(serverName.getStartcode()) %></td>
-</tr>
-<%java>
-    }
-</%java>
-</%if>
-<tr><td>Total:<% (backupMasters != null) ? backupMasters.size() : 0 %></td>
-</table>
-
-
-
-

Modified: hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon (original)
+++ hbase/branches/0.95/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon Mon Jun 24 20:31:33 2013
@@ -26,6 +26,8 @@ Set<ServerName> deadServers = null;
 boolean catalogJanitorEnabled = true;
 String filter = "general";
 String format = "html";
+ServerManager serverManager = null;
+AssignmentManager assignmentManager = null;
 </%args>
 <%import>
 java.util.*;
@@ -34,6 +36,8 @@ org.apache.hadoop.hbase.util.Bytes;
 org.apache.hadoop.hbase.util.JvmVersion;
 org.apache.hadoop.hbase.util.FSUtils;
 org.apache.hadoop.hbase.master.HMaster;
+org.apache.hadoop.hbase.master.AssignmentManager;
+org.apache.hadoop.hbase.master.ServerManager;
 org.apache.hadoop.hbase.HConstants;
 org.apache.hadoop.hbase.ServerLoad;
 org.apache.hadoop.hbase.ServerName;
@@ -47,6 +51,11 @@ org.apache.hadoop.hbase.protobuf.generat
   <& ../common/TaskMonitorTmpl; filter = filter; format = "json" &>
   <%java return; %>
 </%if>
+<%java>
+ServerManager serverManager = master.getServerManager();
+AssignmentManager assignmentManager = master.getAssignmentManager();
+</%java>
+
 <!--[if IE]>
 <!DOCTYPE html>
 <![endif]-->
@@ -94,6 +103,7 @@ org.apache.hadoop.hbase.protobuf.generat
     </div>
 
     <div class="container">
+	<%if master.isActiveMaster() %>
         <div class="row inner_header">
             <div class="page-header">
                 <h1>Master <small><% master.getServerName().getHostname() %> </small></h1>
@@ -125,12 +135,9 @@ org.apache.hadoop.hbase.protobuf.generat
                 <& deadRegionServers &>
             </%if>
         </section>
-
         <section>
-            <h2>Backup Masters</h2>
-            <& BackupMasterListTmpl; master = master &>
+            <& BackupMasterStatusTmpl; master = master &>
         </section>
-
         <section>
             <h2>Tables</h2>
             <div class="tabbable">
@@ -162,8 +169,13 @@ org.apache.hadoop.hbase.protobuf.generat
                 </div>
             </div>
         </section>
-
         <& AssignmentManagerStatusTmpl; assignmentManager=master.getAssignmentManager()&>
+	<%else>
+        <section>
+            <& BackupMasterStatusTmpl; master = master &>
+        </section>
+	</%if>    
+
 
         <section>
             <& ../common/TaskMonitorTmpl; filter = filter &>
@@ -197,47 +209,49 @@ org.apache.hadoop.hbase.protobuf.generat
                     <td>When Hadoop version was compiled and by whom</td>
                 </tr>
                 <tr>
-                    <td>HBase Root Directory</td>
-                    <td><% FSUtils.getRootDir(master.getConfiguration()).toString() %></td>
-                    <td>Location of HBase home directory</td>
-                </tr>
-                <tr>
-                    <td>HBase Cluster ID</td>
-                    <td><% master.getClusterId() != null ? master.getClusterId() : "Not set" %></td>
-                    <td>Unique identifier generated for each HBase cluster</td>
-                </tr>
-                <tr>
-                    <td>Load average</td>
-                    <td><% StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad()) %></td>
-                    <td>Average number of regions per regionserver. Naive computation.</td>
-                </tr>
-                <%if frags != null %>
-                <tr>
-                    <td>Fragmentation</td>
-                    <td><% frags.get("-TOTAL-") != null ? frags.get("-TOTAL-").intValue() + "%" : "n/a" %></td>
-                    <td>Overall fragmentation of all tables, including .META.</td>
-                </tr>
-                </%if>
-                <tr>
                     <td>Zookeeper Quorum</td>
                     <td><% master.getZooKeeperWatcher().getQuorum() %></td>
                     <td>Addresses of all registered ZK servers. For more, see <a href="/zk.jsp">zk dump</a>.</td>
                 </tr>
                 <tr>
-                    <td>Coprocessors</td>
-                    <td><% java.util.Arrays.toString(master.getCoprocessors()) %></td>
-                    <td>Coprocessors currently loaded by the master</td>
+                    <td>HBase Root Directory</td>
+                    <td><% FSUtils.getRootDir(master.getConfiguration()).toString() %></td>
+                    <td>Location of HBase home directory</td>
                 </tr>
                 <tr>
                     <td>HMaster Start Time</td>
                     <td><% new Date(master.getMasterStartTime()) %></td>
                     <td>Date stamp of when this HMaster was started</td>
                 </tr>
-                <tr>
-                    <td>HMaster Active Time</td>
-                    <td><% new Date(master.getMasterActiveTime()) %></td>
-                    <td>Date stamp of when this HMaster became active</td>
-                </tr>
+                <%if master.isActiveMaster() %>
+	                <tr>
+	                    <td>HMaster Active Time</td>
+	                    <td><% new Date(master.getMasterActiveTime()) %></td>
+	                    <td>Date stamp of when this HMaster became active</td>
+	                </tr>
+	                <tr>
+	                    <td>HBase Cluster ID</td>
+	                    <td><% master.getClusterId() != null ? master.getClusterId() : "Not set" %></td>
+	                    <td>Unique identifier generated for each HBase cluster</td>
+	                </tr>
+	                <tr>
+	                    <td>Load average</td>
+	                    <td><% StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad()) %></td>
+	                    <td>Average number of regions per regionserver. Naive computation.</td>
+	                </tr>
+	                <%if frags != null %>
+	                <tr>
+	                    <td>Fragmentation</td>
+	                    <td><% frags.get("-TOTAL-") != null ? frags.get("-TOTAL-").intValue() + "%" : "n/a" %></td>
+	                    <td>Overall fragmentation of all tables, including .META.</td>
+	                </tr>
+	                </%if>
+	                <tr>
+	                    <td>Coprocessors</td>
+	                    <td><% java.util.Arrays.toString(master.getCoprocessors()) %></td>
+	                    <td>Coprocessors currently loaded by the master</td>
+	                </tr>
+                </%if>
             </table>
         </section>
         </div>

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java Mon Jun 24 20:31:33 2013
@@ -49,7 +49,7 @@ import org.apache.zookeeper.KeeperExcept
  * the active master of the cluster.
  */
 @InterfaceAudience.Private
-class ActiveMasterManager extends ZooKeeperListener {
+public class ActiveMasterManager extends ZooKeeperListener {
   private static final Log LOG = LogFactory.getLog(ActiveMasterManager.class);
 
   final AtomicBoolean clusterHasActiveMaster = new AtomicBoolean(false);

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Mon Jun 24 20:31:33 2013
@@ -197,6 +197,7 @@ import org.apache.hadoop.hbase.util.Vers
 import org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker;
 import org.apache.hadoop.hbase.zookeeper.DrainingServerTracker;
 import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;
+import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;
 import org.apache.hadoop.hbase.zookeeper.RegionServerTracker;
 import org.apache.hadoop.hbase.zookeeper.ZKClusterId;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
@@ -258,6 +259,8 @@ MasterServices, Server {
   private DrainingServerTracker drainingServerTracker;
   // Tracker for load balancer state
   private LoadBalancerTracker loadBalancerTracker;
+  // master address manager and watcher
+  private MasterAddressTracker masterAddressManager;
 
   // RPC server for the HMaster
   private final RpcServerInterface rpcServer;
@@ -528,6 +531,20 @@ MasterServices, Server {
     masterStartTime = System.currentTimeMillis();
     try {
       this.registeredZKListenersBeforeRecovery = this.zooKeeper.getListeners();
+      this.masterAddressManager = new MasterAddressTracker(getZooKeeperWatcher(), this);
+      this.masterAddressManager.start();
+
+      // Put up info server.
+      int port = this.conf.getInt("hbase.master.info.port", 60010);
+      if (port >= 0) {
+        String a = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");
+        this.infoServer = new InfoServer(MASTER, a, port, false, this.conf);
+        this.infoServer.addServlet("status", "/master-status", MasterStatusServlet.class);
+        this.infoServer.addServlet("dump", "/dump", MasterDumpServlet.class);
+        this.infoServer.setAttribute(MASTER, this);
+        this.infoServer.start();
+      }
+
       /*
        * Block on becoming the active master.
        *
@@ -1057,6 +1074,14 @@ MasterServices, Server {
     return this.zooKeeper;
   }
 
+  public ActiveMasterManager getActiveMasterManager() {
+    return this.activeMasterManager;
+  }
+  
+  public MasterAddressTracker getMasterAddressManager() {
+    return this.masterAddressManager;
+  }
+  
   /*
    * Start up all services. If any of these threads gets an unhandled exception
    * then they just die with a logged message.  This should be fine because
@@ -1095,17 +1120,6 @@ MasterServices, Server {
         .getFileSystem(), archiveDir);
     Threads.setDaemonThreadRunning(hfileCleaner.getThread(), n + ".archivedHFileCleaner");
 
-   // Put up info server.
-   int port = this.conf.getInt(HConstants.MASTER_INFO_PORT, 60010);
-   if (port >= 0) {
-     String a = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");
-     this.infoServer = new InfoServer(MASTER, a, port, false, this.conf);
-     this.infoServer.addServlet("status", "/master-status", MasterStatusServlet.class);
-     this.infoServer.addServlet("dump", "/dump", MasterDumpServlet.class);
-     this.infoServer.setAttribute(MASTER, this);
-     this.infoServer.start();
-    }
-
     // Start the health checker
     if (this.healthCheckChore != null) {
       Threads.setDaemonThreadRunning(this.healthCheckChore.getThread(), n + ".healthChecker");

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java Mon Jun 24 20:31:33 2013
@@ -59,12 +59,17 @@ public class MasterStatusServlet extends
     HBaseAdmin admin = new HBaseAdmin(conf);
 
     Map<String, Integer> frags = getFragmentationInfo(master, conf);
-
-    ServerName metaLocation = getMetaLocationOrNull(master);
-    //ServerName metaLocation = master.getCatalogTracker().getMetaLocation();
-    List<ServerName> servers = master.getServerManager().getOnlineServersList();
-    Set<ServerName> deadServers = master.getServerManager().getDeadServers().copyServerNames();
-
+    ServerName metaLocation = null;
+    List<ServerName> servers = null;
+    Set<ServerName> deadServers = null;
+    
+    if(master.isActiveMaster()){
+      metaLocation = getMetaLocationOrNull(master);
+      //ServerName metaLocation = master.getCatalogTracker().getMetaLocation();
+      servers = master.getServerManager().getOnlineServersList();
+      deadServers = master.getServerManager().getDeadServers().copyServerNames();
+    }
+    
     response.setContentType("text/html");
     MasterStatusTmpl tmpl;
     try {
@@ -76,6 +81,7 @@ public class MasterStatusServlet extends
       .setCatalogJanitorEnabled(master.isCatalogJanitorEnabled(null,
           RequestConverter.buildIsCatalogJanitorEnabledRequest()).getValue());
     } catch (ServiceException s) {
+      admin.close();
       throw new IOException(s);
     }
     if (request.getParameter("filter") != null)
@@ -88,7 +94,7 @@ public class MasterStatusServlet extends
 
   private ServerName getMetaLocationOrNull(HMaster master) {
     try {
-      return master.getCatalogTracker().getMetaLocation();
+      return (master.getCatalogTracker() == null) ? null : master.getCatalogTracker().getMetaLocation();
     } catch (InterruptedException e) {
       LOG.warn("Unable to get meta location", e);
       return null;

Modified: hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java?rev=1496201&r1=1496200&r2=1496201&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java (original)
+++ hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java Mon Jun 24 20:31:33 2013
@@ -33,6 +33,7 @@ import org.apache.hadoop.conf.Configurat
 import org.apache.hadoop.hbase.*;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl;
 import org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl;
@@ -90,6 +91,11 @@ public class TestMasterStatusServlet {
     Mockito.doReturn("fakequorum").when(zkw).getQuorum();
     Mockito.doReturn(zkw).when(master).getZooKeeperWatcher();
 
+    // Fake MasterAddressTracker
+    MasterAddressTracker tracker = Mockito.mock(MasterAddressTracker.class);
+    Mockito.doReturn(tracker).when(master).getMasterAddressManager();
+    Mockito.doReturn(FAKE_HOST).when(tracker).getMasterAddress();
+
     // Mock admin
     admin = Mockito.mock(HBaseAdmin.class); 
   }