浏览代码

HDFS-8484. Erasure coding: Two contiguous blocks occupy IDs belong to same striped group. Contributed by Walter Su.

Jing Zhao 10 年之前
父节点
当前提交
e692c7dd92

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt

@@ -338,3 +338,6 @@
 
     HDFS-8563. Erasure Coding: fsck handles file smaller than a full stripe.
     (Walter Su via jing9)
+
+    HDFS-8484. Erasure coding: Two contiguous blocks occupy IDs belong to same
+    striped group. (Walter Su via jing9)

+ 11 - 9
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java

@@ -3690,17 +3690,19 @@ public class BlockManager {
   }
 
   public BlockInfo getStoredBlock(Block block) {
-    BlockInfo info = null;
-    if (BlockIdManager.isStripedBlockID(block.getBlockId())) {
-      info = blocksMap.getStoredBlock(
+    if (!BlockIdManager.isStripedBlockID(block.getBlockId())) {
+      return blocksMap.getStoredBlock(block);
+    }
+    if (!hasNonEcBlockUsingStripedID) {
+      return blocksMap.getStoredBlock(
           new Block(BlockIdManager.convertToStripedID(block.getBlockId())));
-      if ((info == null) && hasNonEcBlockUsingStripedID){
-        info = blocksMap.getStoredBlock(block);
-      }
-    } else {
-      info = blocksMap.getStoredBlock(block);
     }
-    return info;
+    BlockInfo info = blocksMap.getStoredBlock(block);
+    if (info != null) {
+      return info;
+    }
+    return blocksMap.getStoredBlock(
+        new Block(BlockIdManager.convertToStripedID(block.getBlockId())));
   }
 
   /** updates a block in under replication queue */