Author: jxiang
Date: Fri Apr 11 15:59:26 2014
New Revision: 1586705
URL: http://svn.apache.org/r1586705
Log:
HBASE-10897 On master start, deadlock if refresh UI
Modified:
hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
Modified:
hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
URL:
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon?rev=1586705&r1=1586704&r2=1586705&view=diff
==============================================================================
---
hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
(original)
+++
hbase/trunk/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon
Fri Apr 11 15:59:26 2014
@@ -198,7 +198,9 @@ AssignmentManager assignmentManager = ma
</div>
</div>
</section>
+ <%if master.getAssignmentManager() != null %>
<& AssignmentManagerStatusTmpl;
assignmentManager=master.getAssignmentManager()&>
+ </%if>
<%else>
<section>
<& BackupMasterStatusTmpl; master = master &>
@@ -266,7 +268,8 @@ AssignmentManager assignmentManager = ma
</tr>
<tr>
<td>Load average</td>
- <td><%
StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad()) %></td>
+ <td><% master.getServerManager() == null ? "0.00" :
+
StringUtils.limitDecimalTo2(master.getServerManager().getAverageLoad()) %></td>
<td>Average number of regions per regionserver.
Naive computation.</td>
</tr>
<%if frags != null %>
@@ -278,7 +281,8 @@ AssignmentManager assignmentManager = ma
</%if>
<tr>
<td>Coprocessors</td>
- <td><%
java.util.Arrays.toString(master.getMasterCoprocessors()) %></td>
+ <td><% master.getMasterCoprocessorHost() == null ?
"[]" :
+
java.util.Arrays.toString(master.getMasterCoprocessors()) %></td>
<td>Coprocessors currently loaded by the master</td>
</tr>
</%if>
@@ -295,10 +299,10 @@ AssignmentManager assignmentManager = ma
<%def catalogTables>
<%java>
- HTableDescriptor[] sysTables =
admin.listTableDescriptorsByNamespace(NamespaceDescriptor
- .SYSTEM_NAMESPACE_NAME_STR);
+ HTableDescriptor[] sysTables = master.isInitialized() ?
admin.listTableDescriptorsByNamespace(
+ NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR) : null;
</%java>
-
+<%if (sysTables != null && sysTables.length > 0)%>
<table class="table table-striped">
<tr>
<th>Table Name</th>
@@ -326,11 +330,12 @@ AssignmentManager assignmentManager = ma
</tr>
</%for>
</table>
+</%if>
</%def>
<%def userTables>
<%java>
- HTableDescriptor[] tables = admin.listTables();
+ HTableDescriptor[] tables = master.isInitialized() ? admin.listTables() :
null;
</%java>
<%if (tables != null && tables.length > 0)%>
<table class="table table-striped">
@@ -360,7 +365,7 @@ AssignmentManager assignmentManager = ma
<%def userSnapshots>
<%java>
- List<SnapshotDescription> snapshots = admin.listSnapshots();
+ List<SnapshotDescription> snapshots = master.isInitialized() ?
admin.listSnapshots() : null;
</%java>
<%if (snapshots != null && snapshots.size() > 0)%>
<table class="table table-striped">
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1586705&r1=1586704&r2=1586705&view=diff
==============================================================================
---
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
(original)
+++
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
Fri Apr 11 15:59:26 2014
@@ -722,6 +722,11 @@ public class HMaster extends HRegionServ
tableNamespaceManager.start();
}
+ boolean isCatalogJanitorEnabled() {
+ return catalogJanitorChore != null ?
+ catalogJanitorChore.getEnabled() : false;
+ }
+
private void splitMetaLogBeforeAssignment(ServerName currentMetaServer)
throws IOException {
if (this.distributedLogReplay) {
// In log replay mode, we mark hbase:meta region as recovering in ZK
@@ -1503,14 +1508,22 @@ public class HMaster extends HRegionServ
return s1.getServerName().compareTo(s2.getServerName());
}});
- return new ClusterStatus(VersionInfo.getVersion(),
- this.fileSystemManager.getClusterId().toString(),
- this.serverManager.getOnlineServers(),
- this.serverManager.getDeadServers().copyServerNames(),
- this.serverName,
- backupMasters,
- this.assignmentManager.getRegionStates().getRegionsInTransition(),
- this.getMasterCoprocessors(), this.loadBalancerTracker.isBalancerOn());
+ String clusterId = fileSystemManager != null ?
+ fileSystemManager.getClusterId().toString() : null;
+ Map<String, RegionState> regionsInTransition = assignmentManager != null ?
+ assignmentManager.getRegionStates().getRegionsInTransition() : null;
+ String[] coprocessors = cpHost != null ? getMasterCoprocessors() : null;
+ boolean balancerOn = loadBalancerTracker != null ?
+ loadBalancerTracker.isBalancerOn() : false;
+ Map<ServerName, ServerLoad> onlineServers = null;
+ Set<ServerName> deadServers = null;
+ if (serverManager != null) {
+ deadServers = serverManager.getDeadServers().copyServerNames();
+ onlineServers = serverManager.getOnlineServers();
+ }
+ return new ClusterStatus(VersionInfo.getVersion(), clusterId,
+ onlineServers, deadServers, serverName, backupMasters,
+ regionsInTransition, coprocessors, balancerOn);
}
/**
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java?rev=1586705&r1=1586704&r2=1586705&view=diff
==============================================================================
---
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
(original)
+++
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
Fri Apr 11 15:59:26 2014
@@ -814,9 +814,8 @@ public class MasterRpcServices extends R
@Override
public IsCatalogJanitorEnabledResponse isCatalogJanitorEnabled(RpcController
c,
IsCatalogJanitorEnabledRequest req) throws ServiceException {
- boolean isEnabled = master.catalogJanitorChore != null ?
- master.catalogJanitorChore.getEnabled() : false;
- return
IsCatalogJanitorEnabledResponse.newBuilder().setValue(isEnabled).build();
+ return IsCatalogJanitorEnabledResponse.newBuilder().setValue(
+ master.isCatalogJanitorEnabled()).build();
}
@Override
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java?rev=1586705&r1=1586704&r2=1586705&view=diff
==============================================================================
---
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
(original)
+++
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterStatusServlet.java
Fri Apr 11 15:59:26 2014
@@ -33,12 +33,9 @@ import org.apache.hadoop.classification.
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.protobuf.RequestConverter;
import org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl;
import org.apache.hadoop.hbase.util.FSUtils;
-import com.google.protobuf.ServiceException;
-
/**
* The servlet responsible for rendering the index page of the
* master.
@@ -57,12 +54,6 @@ public class MasterStatusServlet extends
response.setContentType("text/html");
- if (!master.isOnline()) {
- response.getWriter().write("The Master is initializing!");
- response.getWriter().close();
- return;
- }
-
Configuration conf = master.getConfiguration();
HBaseAdmin admin = new HBaseAdmin(conf);
@@ -72,29 +63,21 @@ public class MasterStatusServlet extends
Set<ServerName> deadServers = null;
if(master.isActiveMaster()) {
- if (!master.isInitialized()) {
- response.sendError(503, "Master not ready");
- return;
- }
metaLocation = getMetaLocationOrNull(master);
- //ServerName metaLocation = master.getCatalogTracker().getMetaLocation();
- servers = master.getServerManager().getOnlineServersList();
- deadServers =
master.getServerManager().getDeadServers().copyServerNames();
+ ServerManager serverManager = master.getServerManager();
+ if (serverManager != null) {
+ deadServers = serverManager.getDeadServers().copyServerNames();
+ servers = serverManager.getOnlineServersList();
+ }
}
- MasterStatusTmpl tmpl;
- try {
- tmpl = new MasterStatusTmpl()
+ MasterStatusTmpl tmpl = new MasterStatusTmpl()
.setFrags(frags)
.setMetaLocation(metaLocation)
.setServers(servers)
.setDeadServers(deadServers)
-
.setCatalogJanitorEnabled(master.getMasterRpcServices().isCatalogJanitorEnabled(
- null,
RequestConverter.buildIsCatalogJanitorEnabledRequest()).getValue());
- } catch (ServiceException s) {
- admin.close();
- throw new IOException(s);
- }
+ .setCatalogJanitorEnabled(master.isCatalogJanitorEnabled());
+
if (request.getParameter("filter") != null)
tmpl.setFilter(request.getParameter("filter"));
if (request.getParameter("format") != null)
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1586705&r1=1586704&r2=1586705&view=diff
==============================================================================
---
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
(original)
+++
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
Fri Apr 11 15:59:26 2014
@@ -427,13 +427,12 @@ public class ServerManager {
public double getAverageLoad() {
int totalLoad = 0;
int numServers = 0;
- double averageLoad;
for (ServerLoad sl: this.onlineServers.values()) {
numServers++;
totalLoad += sl.getNumberOfRegions();
}
- averageLoad = (double)totalLoad / (double)numServers;
- return averageLoad;
+ return numServers == 0 ? 0 :
+ (double)totalLoad / (double)numServers;
}
/**