This is an automated email from the ASF dual-hosted git repository. tasanuma pushed a commit to branch branch-3.3 in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 0e9042fed587bb327a069d643986d5ac7d9c0c8b Author: litao <[email protected]> AuthorDate: Mon Apr 26 17:38:43 2021 +0800 HDFS-15991. Add location into datanode info for NameNodeMXBean (#2933) Signed-off-by: Takanobu Asanuma <[email protected]> (cherry picked from commit b968fa0957ddd0f59c9adfd068507722db7207c6) --- .../src/main/webapps/router/federationhealth.html | 2 +- .../hadoop/hdfs/server/namenode/FSNamesystem.java | 4 ++++ .../src/main/webapps/hdfs/dfshealth.html | 10 ++++----- .../hdfs/server/namenode/TestNameNodeMXBean.java | 25 ++++++++++++++++++++-- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html index a9afe40..389491c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/webapps/router/federationhealth.html @@ -406,7 +406,7 @@ </thead> {#EnteringMaintenanceNodes} <tr> - <td>{name} ({xferaddr})</td> + <td>{location}/{name} ({xferaddr})</td> <td>{underReplicatedBlocks}</td> <td>{maintenanceOnlyReplicas}</td> <td>{underReplicateInOpenFiles}</td> diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index ba52441..a7c4312 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -6408,6 +6408,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, .put("infoAddr", node.getInfoAddr()) .put("infoSecureAddr", node.getInfoSecureAddr()) .put("xferaddr", node.getXferAddr()) + .put("location", node.getNetworkLocation()) .put("lastContact", getLastContact(node)) .put("usedSpace", getDfsUsed(node)) .put("adminState", node.getAdminState().toString()) @@ -6457,6 +6458,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, .put("decommissioned", node.isDecommissioned()) .put("adminState", node.getAdminState().toString()) .put("xferaddr", node.getXferAddr()) + .put("location", node.getNetworkLocation()) .build(); info.put(node.getHostName() + ":" + node.getXferPort(), innerinfo); } @@ -6478,6 +6480,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, Map<String, Object> innerinfo = ImmutableMap .<String, Object> builder() .put("xferaddr", node.getXferAddr()) + .put("location", node.getNetworkLocation()) .put("underReplicatedBlocks", node.getLeavingServiceStatus().getUnderReplicatedBlocks()) .put("decommissionOnlyReplicas", @@ -6505,6 +6508,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean, Map<String, Object> attrMap = ImmutableMap .<String, Object> builder() .put("xferaddr", node.getXferAddr()) + .put("location", node.getNetworkLocation()) .put("underReplicatedBlocks", node.getLeavingServiceStatus().getUnderReplicatedBlocks()) .put("maintenanceOnlyReplicas", diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html index 6eeac85..0751785 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/dfshealth.html @@ -341,7 +341,7 @@ {#LiveNodes} <tr> <td ng-value="{state}">{state}</td> - <td ng-value="{state}-{name}" class="dfshealth-node-icon dfshealth-node-{state}">{name} ({xferaddr})</td> + <td ng-value="{state}-{name}" class="dfshealth-node-icon dfshealth-node-{state}">{location}/{name} ({xferaddr})</td> <td ng-value="{state}-{name}"><a href='{dnWebAddress}'>{dnWebAddress}</a></td> <td ng-value="{lastContact}">{lastContact}s</td> <td ng-value="{lastBlockReport}">{lastBlockReport}m</td> @@ -364,7 +364,7 @@ {#DeadNodes} <tr class="danger"> <td ng-value="{state}">{state}</td> - <td ng-value="{state}-{name}" class="dfshealth-node-icon dfshealth-node-{state}">{name} ({xferaddr})</td> + <td ng-value="{state}-{name}" class="dfshealth-node-icon dfshealth-node-{state}">{location}/{name} ({xferaddr})</td> <td></td> <td>{#helper_relative_time value="{lastContact}"/}</td> <td></td> @@ -393,7 +393,7 @@ </thead> {#EnteringMaintenanceNodes} <tr> - <td>{name} ({xferaddr})</td> + <td>{location}/{name} ({xferaddr})</td> <td>{underReplicatedBlocks}</td> <td>{maintenanceOnlyReplicas}</td> <td>{underReplicateInOpenFiles}</td> @@ -419,7 +419,7 @@ </thead> {#DecomNodes} <tr> - <td>{name} ({xferaddr})</td> + <td>{location}/{name} ({xferaddr})</td> <td>{underReplicatedBlocks}</td> <td>{decommissionOnlyReplicas}</td> <td>{underReplicateInOpenFiles}</td> @@ -448,7 +448,7 @@ No nodes are decommissioning. </thead> {#LiveNodes} <tr> - <td>{name} ({xferaddr})</td> + <td>{location}/{name} ({xferaddr})</td> <td>{#helper_date_tostring value="{lastVolumeFailureDate}"/}</td> <td>{volfails}</td> <td>{estimatedCapacityLostTotal|fmt_bytes}</td> diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java index a309e32..81c9cb8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java @@ -112,7 +112,7 @@ public class TestNameNodeMXBean { MiniDFSCluster cluster = null; try { - cluster = new MiniDFSCluster.Builder(conf).numDataNodes(2).build(); + cluster = new MiniDFSCluster.Builder(conf).numDataNodes(4).build(); cluster.waitActive(); // Set upgrade domain on the first DN. @@ -171,7 +171,7 @@ public class TestNameNodeMXBean { "LiveNodes")); Map<String, Map<String, Object>> liveNodes = (Map<String, Map<String, Object>>) JSON.parse(alivenodeinfo); - assertTrue(liveNodes.size() == 2); + assertTrue(liveNodes.size() == 4); for (Map<String, Object> liveNode : liveNodes.values()) { assertTrue(liveNode.containsKey("nonDfsUsedSpace")); assertTrue(((Long)liveNode.get("nonDfsUsedSpace")) >= 0); @@ -195,6 +195,27 @@ public class TestNameNodeMXBean { assertFalse(xferAddr.equals(dnXferAddrInMaintenance) ^ inMaintenance); } assertEquals(fsn.getLiveNodes(), alivenodeinfo); + + // Put the third DN to decommissioning state. + DatanodeDescriptor decommissioningNode = dm.getDatanode( + cluster.getDataNodes().get(2).getDatanodeId()); + decommissioningNode.startDecommission(); + + // Put the fourth DN to decommissioned state. + DatanodeDescriptor decommissionedNode = dm.getDatanode( + cluster.getDataNodes().get(3).getDatanodeId()); + decommissionedNode.setDecommissioned(); + + // Assert the location field is included in the mxbeanName + // under different states + String alivenodeinfo1 = (String) (mbs.getAttribute(mxbeanName, + "LiveNodes")); + Map<String, Map<String, Object>> liveNodes1 = + (Map<String, Map<String, Object>>) JSON.parse(alivenodeinfo1); + for (Map<String, Object> liveNode : liveNodes1.values()) { + assertTrue(liveNode.containsKey("location")); + } + // get attributes DeadNodes String deadNodeInfo = (String) (mbs.getAttribute(mxbeanName, "DeadNodes")); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
