From 122b02e288a310b7031154aa96f3d1b039782b99 Mon Sep 17 00:00:00 2001 From: Ayush Saxena Date: Wed, 25 Sep 2019 01:31:15 +0530 Subject: [PATCH] HDFS-14808. EC: Improper size values for corrupt ec block in LOG. Contributed by Ayush Saxena. (cherry picked from commit 66400c1cbb2b4b2f08f7db965c8b7237072bdcc4) (cherry picked from commit 2bb4ac18ec0ea8804b424b593615bb06e21a4b6c) --- .../hdfs/server/blockmanagement/BlockManager.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java index 7d8d0197882..eb1196b9984 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java @@ -3148,23 +3148,26 @@ public class BlockManager implements BlockStatsMXBean { + storedBlock.getGenerationStamp(), Reason.GENSTAMP_MISMATCH); } boolean wrongSize; + long blockMapSize; if (storedBlock.isStriped()) { assert BlockIdManager.isStripedBlockID(reported.getBlockId()); assert storedBlock.getBlockId() == BlockIdManager.convertToStripedID(reported.getBlockId()); BlockInfoStriped stripedBlock = (BlockInfoStriped) storedBlock; int reportedBlkIdx = BlockIdManager.getBlockIndex(reported); - wrongSize = reported.getNumBytes() != getInternalBlockLength( - stripedBlock.getNumBytes(), stripedBlock.getCellSize(), - stripedBlock.getDataBlockNum(), reportedBlkIdx); + blockMapSize = getInternalBlockLength(stripedBlock.getNumBytes(), + stripedBlock.getCellSize(), stripedBlock.getDataBlockNum(), + reportedBlkIdx); + wrongSize = reported.getNumBytes() != blockMapSize; } else { - wrongSize = storedBlock.getNumBytes() != reported.getNumBytes(); + blockMapSize = storedBlock.getNumBytes(); + wrongSize = blockMapSize != reported.getNumBytes(); } if (wrongSize) { return new BlockToMarkCorrupt(new Block(reported), storedBlock, "block is " + ucState + " and reported length " + reported.getNumBytes() + " does not match " + - "length in block map " + storedBlock.getNumBytes(), + "length in block map " + blockMapSize, Reason.SIZE_MISMATCH); } else { return null; // not corrupt