Index: hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java (revision 1492129) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDeadServer.java (working copy) @@ -27,6 +27,7 @@ import org.junit.experimental.categories.Category; import java.util.List; +import java.util.Set; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -62,6 +63,10 @@ assertFalse(ds.cleanPreviousInstance(deadServer)); ds.add(deadServer); assertTrue(ds.isDeadServer(deadServer)); + Set deadServerNames =ds.copyServerNames(); + for (ServerName eachDeadServer : deadServerNames) { + Assert.assertNotNull(eachDeadServer.getStopTime()); + } final ServerName deadServerHostComingAlive = new ServerName("127.0.0.1", 9090, 223341L); assertTrue(ds.cleanPreviousInstance(deadServerHostComingAlive)); Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java (revision 1492129) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java (working copy) @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -105,6 +106,7 @@ public synchronized void add(ServerName sn) { this.numProcessing++; if (!deadServers.containsKey(sn)){ + sn.setStopTime(new Date(EnvironmentEdgeManager.currentTimeMillis())); deadServers.put(sn, EnvironmentEdgeManager.currentTimeMillis()); } } Index: hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon =================================================================== --- hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon (revision 1492129) +++ hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon (working copy) @@ -329,8 +329,9 @@

Dead Region Servers

- + + <%java> ServerName [] deadServerNames = deadServers.toArray(new ServerName[deadServers.size()]); @@ -339,7 +340,9 @@ int infoPort = master.getConfiguration().getInt("hbase.regionserver.info.port", 60030); + + <%java> } @@ -347,6 +350,7 @@ +
ServerNameStop time
<% deadServerName %><% deadServerName.getStopTime() %>
Total: servers: <% deadServers.size() %>
Index: hbase-client/src/main/java/org/apache/hadoop/hbase/ServerName.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/ServerName.java (revision 1492129) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/ServerName.java (working copy) @@ -29,6 +29,7 @@ import org.apache.hadoop.hbase.util.Bytes; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.regex.Pattern; @@ -86,6 +87,7 @@ private final String hostnameOnly; private final int port; private final long startcode; + private Date stopTime; /** * Cached versioned bytes of this ServerName instance. @@ -366,4 +368,12 @@ int port = Addressing.parsePort(str); return new ServerName(hostname, port, -1L); } + + public Date getStopTime() { + return stopTime; + } + + public void setStopTime(Date stopTime) { + this.stopTime = stopTime; + } }