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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]