From b437f5eef40874287d4fbf9d8e43f1a857b5621f Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Thu, 11 Dec 2014 18:12:47 -0800 Subject: [PATCH] HDFS-7497. Inconsistent report of decommissioning DataNodes between dfsadmin and NameNode webui. Contributed by Yongjun Zhang. --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hdfs/server/blockmanagement/DatanodeManager.java | 12 ++---------- .../server/namenode/TestDecommissioningStatus.java | 7 ++++++- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 5e75424063..5977ed79d2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -576,6 +576,9 @@ Release 2.7.0 - UNRELEASED HDFS-7515. Fix new findbugs warnings in hadoop-hdfs. (wheat9) + HDFS-7497. Inconsistent report of decommissioning DataNodes between + dfsadmin and NameNode webui. (Yongjun Zhang via wang) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java index 356a4a3cf0..0ff469a8c8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java @@ -1112,16 +1112,8 @@ public int getNumDeadDataNodes() { public List getDecommissioningNodes() { // There is no need to take namesystem reader lock as // getDatanodeListForReport will synchronize on datanodeMap - final List decommissioningNodes - = new ArrayList(); - final List results = getDatanodeListForReport( - DatanodeReportType.LIVE); - for(DatanodeDescriptor node : results) { - if (node.isDecommissionInProgress()) { - decommissioningNodes.add(node); - } - } - return decommissioningNodes; + // A decommissioning DN may be "alive" or "dead". + return getDatanodeListForReport(DatanodeReportType.DECOMMISSIONING); } /* Getter and Setter for stale DataNodes related attributes */ diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestDecommissioningStatus.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestDecommissioningStatus.java index 28f5eb497b..a9aba864e9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestDecommissioningStatus.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestDecommissioningStatus.java @@ -239,10 +239,10 @@ private void checkDFSAdminDecommissionStatus( System.setOut(oldOut); } } + /** * Tests Decommissioning Status in DFS. */ - @Test public void testDecommissionStatus() throws IOException, InterruptedException { InetSocketAddress addr = new InetSocketAddress("localhost", cluster @@ -351,6 +351,11 @@ public void testDecommissionStatusAfterDNRestart() assertTrue("the node should be DECOMMISSION_IN_PROGRESSS", dead.get(0).isDecommissionInProgress()); + // Check DatanodeManager#getDecommissionNodes, make sure it returns + // the node as decommissioning, even if it's dead + List decomlist = dm.getDecommissioningNodes(); + assertTrue("The node should be be decommissioning", decomlist.size() == 1); + // Delete the under-replicated file, which should let the // DECOMMISSION_IN_PROGRESS node become DECOMMISSIONED cleanupFile(fileSys, f);