You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by we...@apache.org on 2019/06/21 02:38:03 UTC

[hadoop] branch branch-2.9 updated: HDFS-14465. When the Block expected replications is larger than the number of DataNodes, entering maintenance will never exit. Contributed by Yicong Cai.

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

weichiu pushed a commit to branch branch-2.9
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-2.9 by this push:
     new c5afc71  HDFS-14465. When the Block expected replications is larger than the number of DataNodes, entering maintenance will never exit. Contributed by Yicong Cai.
c5afc71 is described below

commit c5afc717e2e0208345d451b8c27cb1fe9de73c93
Author: Wei-Chiu Chuang <we...@apache.org>
AuthorDate: Thu Jun 20 19:36:44 2019 -0700

    HDFS-14465. When the Block expected replications is larger than the number of DataNodes, entering maintenance will never exit. Contributed by Yicong Cai.
    
    (cherry picked from commit f876e82abc83c05957acf6c56b26d94c9dfe9372)
---
 .../hadoop/hdfs/server/blockmanagement/DatanodeAdminManager.java | 9 +++++++--
 .../test/java/org/apache/hadoop/hdfs/TestMaintenanceState.java   | 1 +
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeAdminManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeAdminManager.java
index a74b1c2..8a51fb5 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeAdminManager.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeAdminManager.java
@@ -349,7 +349,7 @@ public class DatanodeAdminManager {
    * @return true if sufficient, else false.
    */
   private boolean isSufficientlyReplicated(BlockInfo block, BlockCollection bc,
-      NumberReplicas numberReplicas, boolean isDecommission) {
+      NumberReplicas numberReplicas, boolean isDecommission, boolean isMaintenance) {
     if (blockManager.hasEnoughEffectiveReplicas(block, numberReplicas, 0)) {
       // Block has enough replica, skip
       LOG.trace("Block {} does not need replication.", block);
@@ -382,6 +382,10 @@ public class DatanodeAdminManager {
         }
       }
     }
+
+    if (isMaintenance && numLive >= blockManager.getMinReplicationToBeInMaintenance()) {
+      return true;
+    }
     return false;
   }
 
@@ -726,6 +730,7 @@ public class DatanodeAdminManager {
         // Schedule under-replicated blocks for replication if not already
         // pending
         boolean isDecommission = datanode.isDecommissionInProgress();
+        boolean isMaintenance = datanode.isEnteringMaintenance();
         boolean neededReplication = isDecommission ?
             blockManager.isNeededReplication(block, num) :
             blockManager.isNeededReplicationForMaintenance(block, num);
@@ -743,7 +748,7 @@ public class DatanodeAdminManager {
 
         // Even if the block is under-replicated,
         // it doesn't block decommission if it's sufficiently replicated 
-        if (isSufficientlyReplicated(block, bc, num, isDecommission)) {
+        if (isSufficientlyReplicated(block, bc, num, isDecommission, isMaintenance)) {
           if (pruneSufficientlyReplicated) {
            it.remove();
           }
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMaintenanceState.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMaintenanceState.java
index e0dfb4a..ef25aae 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMaintenanceState.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMaintenanceState.java
@@ -373,6 +373,7 @@ public class TestMaintenanceState extends AdminStatesBaseTest {
     testExpectedReplication(2);
     testExpectedReplication(3);
     testExpectedReplication(4);
+    testExpectedReplication(10);
   }
 
   private void testExpectedReplication(int replicationFactor)


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