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

HDFS-8684. Erasure Coding: fix some block number calculation for striped block. (yliu)

yliu преди 10 години
родител
ревизия
ee01a09500

+ 4 - 1
hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt

@@ -325,4 +325,7 @@
     multiple times.  (Kai Sasaki via szetszwo)
 
     HDFS-8468. 2 RPC calls for every file read in DFSClient#open(..) resulting in
-    double Audit log entries (vinayakumarb)
+    double Audit log entries (vinayakumarb)
+
+    HDFS-8684. Erasure Coding: fix some block number calculation for striped
+    block. (yliu)

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

@@ -3109,12 +3109,12 @@ public class BlockManager {
         bc.getStoragePolicyID());
     final List<StorageType> excessTypes = storagePolicy.chooseExcess(
         replication, DatanodeStorageInfo.toStorageTypes(nonExcess));
-    if (!storedBlock.isStriped()) {
-      chooseExcessReplicasContiguous(bc, nonExcess, storedBlock,
-          replication, addedNode, delNodeHint, excessTypes);
-    } else {
+    if (storedBlock.isStriped()) {
       chooseExcessReplicasStriped(bc, nonExcess, storedBlock, delNodeHint,
           excessTypes);
+    } else {
+      chooseExcessReplicasContiguous(bc, nonExcess, storedBlock,
+          replication, addedNode, delNodeHint, excessTypes);
     }
   }
 
@@ -3191,9 +3191,6 @@ public class BlockManager {
     assert storedBlock instanceof BlockInfoStriped;
     BlockInfoStriped sblk = (BlockInfoStriped) storedBlock;
     short groupSize = sblk.getTotalBlockNum();
-    if (nonExcess.size() <= groupSize) {
-      return;
-    }
     BlockPlacementPolicy placementPolicy = placementPolicies.getPolicy(true);
     List<DatanodeStorageInfo> empty = new ArrayList<>(0);
 

+ 1 - 5
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeFile.java

@@ -809,13 +809,9 @@ public class INodeFile extends INodeWithAdditionalFields
       if (!includesLastUcBlock) {
         size = 0;
       } else if (usePreferredBlockSize4LastUcBlock) {
-        // Striped blocks keeps block group which counts
-        // (data blocks num + parity blocks num). When you
-        // count actual used size by BlockInfoStripedUC must
-        // be multiplied by these blocks number.
         BlockInfoStripedUnderConstruction blockInfoStripedUC
             = (BlockInfoStripedUnderConstruction) blockInfos[last];
-        size = getPreferredBlockSize() * blockInfoStripedUC.getTotalBlockNum();
+        size = getPreferredBlockSize() * blockInfoStripedUC.getDataBlockNum();
       }
     }
     //sum other blocks