Browse Source

HDFS-14366. Improve HDFS append performance. Contributed by Chao Sun.

(cherry picked from commit ff06ef0631cb8a0f67bbc39b5b5a1b0a81ca3b3c)
Inigo Goiri 6 năm trước cách đây
mục cha
commit
80732146c6

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

@@ -1469,9 +1469,13 @@ public class BlockManager implements BlockStatsMXBean {
    */
    */
   public boolean isSufficientlyReplicated(BlockInfo b) {
   public boolean isSufficientlyReplicated(BlockInfo b) {
     // Compare against the lesser of the minReplication and number of live DNs.
     // Compare against the lesser of the minReplication and number of live DNs.
-    final int replication =
-        Math.min(minReplication, getDatanodeManager().getNumLiveDataNodes());
-    return countNodes(b).liveReplicas() >= replication;
+    final int liveReplicas = countNodes(b).liveReplicas();
+    if (liveReplicas >= minReplication) {
+      return true;
+    }
+    // getNumLiveDataNodes() is very expensive and we minimize its use by
+    // comparing with minReplication first.
+    return liveReplicas >= getDatanodeManager().getNumLiveDataNodes();
   }
   }
 
 
   /** Get all blocks with location information from a datanode. */
   /** Get all blocks with location information from a datanode. */