Browse Source

HDFS-16337. Show start time of Datanode on Web (#3682)

Reviewed-by: Inigo Goiri <inigoiri@apache.org>
litao 3 years ago
parent
commit
0ed817babb

+ 8 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java

@@ -52,6 +52,7 @@ import static org.apache.hadoop.hdfs.protocol.datatransfer.BlockConstructionStag
 import static org.apache.hadoop.hdfs.protocol.datatransfer.BlockConstructionStage.PIPELINE_SETUP_CREATE;
 import static org.apache.hadoop.hdfs.protocol.datatransfer.BlockConstructionStage.PIPELINE_SETUP_CREATE;
 import static org.apache.hadoop.hdfs.protocol.datatransfer.BlockConstructionStage.PIPELINE_SETUP_STREAMING_RECOVERY;
 import static org.apache.hadoop.hdfs.protocol.datatransfer.BlockConstructionStage.PIPELINE_SETUP_STREAMING_RECOVERY;
 import static org.apache.hadoop.util.ExitUtil.terminate;
 import static org.apache.hadoop.util.ExitUtil.terminate;
+import static org.apache.hadoop.util.Time.now;
 
 
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
 import org.apache.hadoop.fs.DF;
 import org.apache.hadoop.fs.DF;
@@ -411,6 +412,8 @@ public class DataNode extends ReconfigurableBase
 
 
   private ScheduledThreadPoolExecutor metricsLoggerTimer;
   private ScheduledThreadPoolExecutor metricsLoggerTimer;
 
 
+  private final long startTime = now();
+
   /**
   /**
    * Creates a dummy DataNode for testing purpose.
    * Creates a dummy DataNode for testing purpose.
    */
    */
@@ -3195,6 +3198,11 @@ public class DataNode extends ReconfigurableBase
     return this.getConf().get("dfs.datanode.info.port");
     return this.getConf().get("dfs.datanode.info.port");
   }
   }
 
 
+  @Override // DataNodeMXBean
+  public long getDNStartedTimeInMillis() {
+    return this.startTime;
+  }
+
   public String getRevision() {
   public String getRevision() {
     return VersionInfo.getRevision();
     return VersionInfo.getRevision();
   }
   }

+ 7 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNodeMXBean.java

@@ -157,4 +157,11 @@ public interface DataNodeMXBean {
    * @return true, if security is enabled.
    * @return true, if security is enabled.
    */
    */
   boolean isSecurityEnabled();
   boolean isSecurityEnabled();
+
+  /**
+   * Get the start time of the DataNode.
+   *
+   * @return Start time of the DataNode.
+   */
+  long getDNStartedTimeInMillis();
 }
 }

+ 1 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode/datanode.html

@@ -71,6 +71,7 @@
 <div class="page-header"><h1>DataNode on <small>{HostName}:{DataPort}</small></h1></div>
 <div class="page-header"><h1>DataNode on <small>{HostName}:{DataPort}</small></h1></div>
 <table class="table table-bordered table-striped">
 <table class="table table-bordered table-striped">
   <tr><th>Cluster ID:</th><td>{ClusterId}</td></tr>
   <tr><th>Cluster ID:</th><td>{ClusterId}</td></tr>
+  <tr><th>Started:</th><td>{DNStartedTimeInMillis|date_tostring}</td></tr>
   <tr><th>Version:</th><td>{Version}</td></tr>
   <tr><th>Version:</th><td>{Version}</td></tr>
 </table>
 </table>
 {/dn}
 {/dn}

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMXBean.java

@@ -75,6 +75,9 @@ public class TestDataNodeMXBean extends SaslDataTransferTestCase {
       // get attribute "Version"
       // get attribute "Version"
       String version = (String)mbs.getAttribute(mxbeanName, "Version");
       String version = (String)mbs.getAttribute(mxbeanName, "Version");
       Assert.assertEquals(datanode.getVersion(),version);
       Assert.assertEquals(datanode.getVersion(),version);
+      // get attribute "DNStartedTimeInMillis"
+      long startTime = (long) mbs.getAttribute(mxbeanName, "DNStartedTimeInMillis");
+      Assert.assertEquals(datanode.getDNStartedTimeInMillis(), startTime);
       // get attribute "SotfwareVersion"
       // get attribute "SotfwareVersion"
       String softwareVersion =
       String softwareVersion =
           (String)mbs.getAttribute(mxbeanName, "SoftwareVersion");
           (String)mbs.getAttribute(mxbeanName, "SoftwareVersion");