diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/LowRedundancyBlocks.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/LowRedundancyBlocks.java index 347d606a04..e3f228d294 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/LowRedundancyBlocks.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/LowRedundancyBlocks.java @@ -365,7 +365,7 @@ class LowRedundancyBlocks implements Iterable { NameNode.blockStateChangeLog.debug( "BLOCK* NameSystem.LowRedundancyBlock.remove: Removing block" + " {} from priority queue {}", block, i); - decrementBlockStat(block, priLevel, oldExpectedReplicas); + decrementBlockStat(block, i, oldExpectedReplicas); return true; } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestLowRedundancyBlockQueues.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestLowRedundancyBlockQueues.java index 2b28f1ef3c..0681a0b640 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestLowRedundancyBlockQueues.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestLowRedundancyBlockQueues.java @@ -123,6 +123,21 @@ public class TestLowRedundancyBlockQueues { verifyBlockStats(queues, 2, 3, 2, 0, 0); } + @Test + public void testRemoveWithWrongPriority() { + final LowRedundancyBlocks queues = new LowRedundancyBlocks(); + final BlockInfo corruptBlock = genBlockInfo(1); + assertAdded(queues, corruptBlock, 0, 0, 3); + assertInLevel(queues, corruptBlock, + LowRedundancyBlocks.QUEUE_WITH_CORRUPT_BLOCKS); + verifyBlockStats(queues, 0, 1, 0, 0, 0); + + // Remove with wrong priority + queues.remove(corruptBlock, LowRedundancyBlocks.QUEUE_LOW_REDUNDANCY); + // Verify the number of corrupt block is decremented + verifyBlockStats(queues, 0, 0, 0, 0, 0); + } + @Test public void testStripedBlockPriorities() throws Throwable { int dataBlkNum = ecPolicy.getNumDataUnits();