This is an automated email from the ASF dual-hosted git repository.
tasanuma 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 e363f51 HDFS-16461. Expose JournalNode storage info in the jmx
metrics (#4002)
e363f51 is described below
commit e363f51ffb841bdf41df69a921ced565d6b03cd6
Author: Viraj Jasani <[email protected]>
AuthorDate: Tue Feb 22 09:34:36 2022 +0530
HDFS-16461. Expose JournalNode storage info in the jmx metrics (#4002)
---
.../apache/hadoop/hdfs/qjournal/server/JournalNode.java | 8 ++++++++
.../hadoop/hdfs/qjournal/server/JournalNodeMXBean.java | 9 +++++++++
.../org/apache/hadoop/hdfs/server/common/StorageInfo.java | 15 +++++++++++++++
.../hdfs/qjournal/server/TestJournalNodeMXBean.java | 11 ++++++++---
4 files changed, 40 insertions(+), 3 deletions(-)
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 d61987a..df1314a 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
@@ -423,6 +423,14 @@ public class JournalNode implements Tool, Configurable,
JournalNodeMXBean {
return this.startTime;
}
+ @Override
+ // JournalNodeMXBean
+ public List<String> getStorageInfos() {
+ return journalsById.values().stream()
+ .map(journal -> journal.getStorage().toMapString())
+ .collect(Collectors.toList());
+ }
+
/**
* 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 2ff22e5..0cce05f 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
@@ -64,4 +64,13 @@ public interface JournalNodeMXBean {
* @return the start time of the JournalNode.
*/
long getJNStartedTimeInMillis();
+
+ /**
+ * Get the list of the storage infos of JournalNode's journals. Storage infos
+ * include layout version, namespace id, cluster id and creation time of the
+ * File system state.
+ *
+ * @return the list of storage infos associated with journals.
+ */
+ List<String> getStorageInfos();
}
diff --git
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java
index 8643821..4a06588 100644
---
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java
+++
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/common/StorageInfo.java
@@ -21,6 +21,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.SortedSet;
@@ -112,6 +113,20 @@ public class StorageInfo {
.append(";nsid=").append(namespaceID).append(";c=").append(cTime);
return sb.toString();
}
+
+ /**
+ * Returns string representation of Storage info attributes stored in Map.
+ *
+ * @return string representation of storage info attributes.
+ */
+ public String toMapString() {
+ Map<String, Object> storageInfo = new HashMap<>();
+ storageInfo.put("LayoutVersion", layoutVersion);
+ storageInfo.put("ClusterId", clusterID);
+ storageInfo.put("NamespaceId", namespaceID);
+ storageInfo.put("CreationTime", cTime);
+ return storageInfo.toString();
+ }
public String toColonSeparatedString() {
return Joiner.on(":").join(
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 1471a4a..179e5a9 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
@@ -44,6 +44,7 @@ public class TestJournalNodeMXBean {
private static final String NAMESERVICE = "ns1";
private static final int NUM_JN = 1;
+ private static final int NS_ID = 12345;
private MiniJournalCluster jCluster;
private JournalNode jn;
@@ -80,9 +81,8 @@ public class TestJournalNodeMXBean {
assertFalse(journalStatus.contains(NAMESERVICE));
// format the journal ns1
- final NamespaceInfo FAKE_NSINFO = new NamespaceInfo(12345, "mycluster",
- "my-bp", 0L);
- jn.getOrCreateJournal(NAMESERVICE).format(FAKE_NSINFO, false);
+ final NamespaceInfo fakeNsInfo = new NamespaceInfo(NS_ID, "mycluster",
"my-bp", 0L);
+ jn.getOrCreateJournal(NAMESERVICE).format(fakeNsInfo, false);
// check again after format
// getJournalsStatus
@@ -109,6 +109,11 @@ public class TestJournalNodeMXBean {
assertEquals(jn.getJNStartedTimeInMillis(), startTime);
String version = (String) mbs.getAttribute(mxbeanName, "Version");
assertEquals(jn.getVersion(), version);
+ String[] journalStorageInfos = (String[]) mbs.getAttribute(mxbeanName,
"StorageInfos");
+ assertEquals(jn.getStorageInfos().size(), journalStorageInfos.length);
+ assertTrue(journalStorageInfos[1].contains("ClusterId=mycluster"));
+ assertTrue(journalStorageInfos[1].contains("CreationTime=0"));
+ assertTrue(journalStorageInfos[1].contains("NamespaceId=" + NS_ID));
// restart journal node without formatting
jCluster = new MiniJournalCluster.Builder(new
Configuration()).format(false)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]