소스 검색

HDFS-10453. ReplicationMonitor thread could stuck for long time due to the race between replication and delete of same file in a large cluster.. Contributed by He Xiaoqiao.

Arpit Agarwal 7 년 전
부모
커밋
02f6030b35
1개의 변경된 파일3개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 1
      hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java

+ 3 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java

@@ -3707,6 +3707,7 @@ public class BlockManager {
   private static class ReplicationWork {
     private final Block block;
     private final String srcPath;
+    private final long blockSize;
     private final byte storagePolicyID;
     private final DatanodeDescriptor srcNode;
     private final int additionalReplRequired;
@@ -3724,6 +3725,7 @@ public class BlockManager {
         int priority) {
       this.block = block;
       this.srcPath = bc.getName();
+      this.blockSize = block.getNumBytes();
       this.storagePolicyID = bc.getStoragePolicyID();
       this.srcNode = srcNode;
       this.srcNode.incrementPendingReplicationWithoutTargets();
@@ -3740,7 +3742,7 @@ public class BlockManager {
       try {
         targets = blockplacement.chooseTarget(getSrcPath(),
             additionalReplRequired, srcNode, liveReplicaStorages, false,
-            excludedNodes, block.getNumBytes(),
+            excludedNodes, blockSize,
             storagePolicySuite.getPolicy(getStoragePolicyID()));
       } finally {
         srcNode.decrementPendingReplicationWithoutTargets();