diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java index 970078eeea..d61987ac9b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNode.java @@ -45,6 +45,7 @@ import org.apache.hadoop.util.DiskChecker; import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_JOURNALNODE_HTTP_BIND_HOST_KEY; import static org.apache.hadoop.util.ExitUtil.terminate; +import static org.apache.hadoop.util.Time.now; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; @@ -83,6 +84,7 @@ public class JournalNode implements Tool, Configurable, JournalNodeMXBean { private String httpServerURI; private final ArrayList localDir = Lists.newArrayList(); Tracer tracer; + private long startTime = 0; static { HdfsConfiguration.init(); @@ -241,6 +243,7 @@ public class JournalNode implements Tool, Configurable, JournalNodeMXBean { rpcServer = new JournalNodeRpcServer(conf, this); rpcServer.start(); + startTime = now(); } catch (IOException ioe) { //Shutdown JournalNode of JournalNodeRpcServer fails to start LOG.error("Failed to start JournalNode.", ioe); @@ -415,6 +418,11 @@ public class JournalNode implements Tool, Configurable, JournalNodeMXBean { return VersionInfo.getVersion() + ", r" + VersionInfo.getRevision(); } + @Override // JournalNodeMXBean + public long getJNStartedTimeInMillis() { + return this.startTime; + } + /** * Register JournalNodeMXBean */ diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeMXBean.java index f265c31a34..2ff22e5f70 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeMXBean.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeMXBean.java @@ -57,4 +57,11 @@ public interface JournalNodeMXBean { * @return the version of Hadoop. */ String getVersion(); + + /** + * Get the start time of the JournalNode. + * + * @return the start time of the JournalNode. + */ + long getJNStartedTimeInMillis(); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/journal/journalnode.html b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/journal/journalnode.html index 0743e943c1..e12560af2a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/journal/journalnode.html +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/journal/journalnode.html @@ -71,6 +71,7 @@ +
Cluster ID:{ClusterIds}
Started:{JNStartedTimeInMillis|date_tostring}
Version:{Version}
{/jn} diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNodeMXBean.java index e571fbce3a..1471a4aa43 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNodeMXBean.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournalNodeMXBean.java @@ -104,6 +104,9 @@ public class TestJournalNodeMXBean { String[] clusterId = (String[]) mbs.getAttribute(mxbeanName, "ClusterIds"); assertEquals(jn.getClusterIds().size(), clusterId.length); assertEquals("mycluster", clusterId[0]); + long startTime = (long) mbs.getAttribute(mxbeanName, "JNStartedTimeInMillis"); + assertTrue("JournalNode start time should not be 0", startTime > 0); + assertEquals(jn.getJNStartedTimeInMillis(), startTime); String version = (String) mbs.getAttribute(mxbeanName, "Version"); assertEquals(jn.getVersion(), version);