Преглед на файлове

svn merge -c 1514156 from trunk for HDFS-4898. BlockPlacementPolicyWithNodeGroup.chooseRemoteRack() fails to properly fallback to local rack.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1514157 13f79535-47bb-0310-9956-ffa450edef68
Tsz-wo Sze преди 11 години
родител
ревизия
49dcb7cfaa

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -98,6 +98,9 @@ Release 2.1.1-beta - UNRELEASED
     HDFS-5051. nn fails to download checkpointed image from snn in some
     setups. (Vinay and suresh via suresh)
 
+    HDFS-4898. BlockPlacementPolicyWithNodeGroup.chooseRemoteRack() fails to
+    properly fallback to local rack. (szetszwo)
+
 Release 2.1.0-beta - 2013-08-06
 
   INCOMPATIBLE CHANGES

+ 10 - 7
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockPlacementPolicyWithNodeGroup.java

@@ -189,15 +189,18 @@ public class BlockPlacementPolicyWithNodeGroup extends BlockPlacementPolicyDefau
           boolean avoidStaleNodes)
           throws NotEnoughReplicasException {
     int oldNumOfReplicas = results.size();
-    // randomly choose one node from remote racks
+
+    final String rackLocation = NetworkTopology.getFirstHalf(
+        localMachine.getNetworkLocation());
     try {
-      chooseRandom(numOfReplicas, "~"+NetworkTopology.getFirstHalf(
-          localMachine.getNetworkLocation()),
-      excludedNodes, blocksize, maxReplicasPerRack, results, avoidStaleNodes);
+      // randomly choose from remote racks
+      chooseRandom(numOfReplicas, "~" + rackLocation, excludedNodes, blocksize,
+          maxReplicasPerRack, results, avoidStaleNodes);
     } catch (NotEnoughReplicasException e) {
-      chooseRandom(numOfReplicas-(results.size()-oldNumOfReplicas),
-      localMachine.getNetworkLocation(), excludedNodes, blocksize, 
-      maxReplicasPerRack, results, avoidStaleNodes);
+      // fall back to the local rack
+      chooseRandom(numOfReplicas - (results.size() - oldNumOfReplicas),
+          rackLocation, excludedNodes, blocksize,
+          maxReplicasPerRack, results, avoidStaleNodes);
     }
   }