This is an automated email from the ASF dual-hosted git repository.

slfan1989 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new daafc8a0b849 HDFS-17367. Add PercentUsed for Different StorageTypes in 
JMX (#6735) Contributed by Hualong Zhang.
daafc8a0b849 is described below

commit daafc8a0b849ffdf851c6a618684656925f1df76
Author: zhtttylz <hualon...@hotmail.com>
AuthorDate: Sat Apr 27 20:36:11 2024 +0800

    HDFS-17367. Add PercentUsed for Different StorageTypes in JMX (#6735) 
Contributed by Hualong Zhang.
    
    Signed-off-by: Shilun Fan <slfan1...@apache.org>
---
 .../hadoop-common/src/site/markdown/Metrics.md     |  9 ++++++++
 .../server/blockmanagement/StorageTypeStats.java   | 19 ++++++++++++++++
 .../blockmanagement/TestBlockStatsMXBean.java      | 26 ++++++++++++++++++++++
 3 files changed, 54 insertions(+)

diff --git a/hadoop-common-project/hadoop-common/src/site/markdown/Metrics.md 
b/hadoop-common-project/hadoop-common/src/site/markdown/Metrics.md
index b75523b08a0e..aaead837102e 100644
--- a/hadoop-common-project/hadoop-common/src/site/markdown/Metrics.md
+++ b/hadoop-common-project/hadoop-common/src/site/markdown/Metrics.md
@@ -326,6 +326,15 @@ Each metrics record contains tags such as HAState and 
Hostname as additional inf
 | `FSN(Read/Write)LockOverallNanosAvgTime` | Average time of holding the lock 
by all operations in nanoseconds |
 | `PendingSPSPaths` | The number of paths to be processed by storage policy 
satisfier |
 
+BlockManager
+-------------
+
+The metrics present statistics from the BlockManager's perspective.
+
+| Name | Description                                                           
                                                          |
+|:---- 
|:--------------------------------------------------------------------------------------------------------------------------------|
+| `StorageTypeStats` | key represents different StorageTypes, and value 
represents the detailed storage information corresponding to each StorageType. |
+
 JournalNode
 -----------
 
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/StorageTypeStats.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/StorageTypeStats.java
index fecbe6a81240..83f18bf7804d 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/StorageTypeStats.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/StorageTypeStats.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.classification.VisibleForTesting;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.fs.StorageType;
+import org.apache.hadoop.hdfs.DFSUtilClient;
 
 /**
  * Statistics per StorageType.
@@ -107,6 +108,24 @@ public class StorageTypeStats {
     return blockPoolUsed;
   }
 
+  public float getPercentUsed() {
+    long used = getCapacityUsed();
+    long total = getCapacityTotal();
+    return DFSUtilClient.getPercentUsed(used, total);
+  }
+
+  public float getPercentBlockPoolUsed() {
+    long poolUsed = getBlockPoolUsed();
+    long total = getCapacityTotal();
+    return DFSUtilClient.getPercentUsed(poolUsed, total);
+  }
+
+  public float getPercentRemaining() {
+    long remaining = getCapacityRemaining();
+    long total = getCapacityTotal();
+    return DFSUtilClient.getPercentUsed(remaining, total);
+  }
+
   public int getNodesInService() {
     return nodesInService;
   }
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockStatsMXBean.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockStatsMXBean.java
index 076a64080860..5753de7c83fd 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockStatsMXBean.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestBlockStatsMXBean.java
@@ -291,4 +291,30 @@ public class TestBlockStatsMXBean {
             5000);
     IOUtils.closeStreams(hotSpFileStream, coldSpFileStream);
   }
+
+  @Test
+  public void testStorageTypePercentJMX() throws Exception {
+    URL baseUrl = new URL(cluster.getHttpUri(0));
+    String result = readOutput(new URL(baseUrl, "/jmx"));
+
+    Map<String, Object> stat = (Map<String, Object>) JSON.parse(result);
+    Object[] beans = (Object[]) stat.get("beans");
+    Map<String, Object> blockStats = null;
+    for (Object bean : beans) {
+      Map<String, Object> map = (Map<String, Object>) bean;
+      if (map.get("name").equals("Hadoop:service=NameNode,name=BlockStats")) {
+        blockStats = map;
+      }
+    }
+    assertNotNull(blockStats);
+    Object[] storageTypeStatsList =
+        (Object[]) blockStats.get("StorageTypeStats");
+    assertNotNull(storageTypeStatsList);
+    Map<String, Object> entry = (Map<String, Object>) storageTypeStatsList[0];
+    Map<String, Object> storageTypeStats = (Map<String, Object>) 
entry.get("value");
+
+    assertTrue(storageTypeStats.containsKey("percentUsed"));
+    assertTrue(storageTypeStats.containsKey("percentBlockPoolUsed"));
+    assertTrue(storageTypeStats.containsKey("percentRemaining"));
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to