HDFS-14852. Removing from LowRedundancyBlocks does not remove the block from all queues. Contributed by Fei Hui.
This commit is contained in:
parent
82a7505646
commit
6a49bf9bff
@ -2531,7 +2531,7 @@ void processPendingReconstructions() {
|
||||
* with the most up-to-date block information (e.g. genstamp).
|
||||
*/
|
||||
BlockInfo bi = blocksMap.getStoredBlock(timedOutItems[i]);
|
||||
if (bi == null) {
|
||||
if (bi == null || bi.isDeleted()) {
|
||||
continue;
|
||||
}
|
||||
NumberReplicas num = countNodes(timedOutItems[i]);
|
||||
|
@ -382,17 +382,18 @@ boolean remove(BlockInfo block, int priLevel, int oldExpectedReplicas) {
|
||||
} else {
|
||||
// Try to remove the block from all queues if the block was
|
||||
// not found in the queue for the given priority level.
|
||||
boolean found = false;
|
||||
for (int i = 0; i < LEVEL; i++) {
|
||||
if (i != priLevel && priorityQueues.get(i).remove(block)) {
|
||||
NameNode.blockStateChangeLog.debug(
|
||||
"BLOCK* NameSystem.LowRedundancyBlock.remove: Removing block" +
|
||||
" {} from priority queue {}", block, i);
|
||||
decrementBlockStat(block, i, oldExpectedReplicas);
|
||||
return true;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
return found;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void decrementBlockStat(BlockInfo blockInfo, int priLevel,
|
||||
|
@ -276,4 +276,15 @@ private void assertInLevel(LowRedundancyBlocks queues,
|
||||
}
|
||||
fail("Block " + block + " not found in level " + level);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveBlockInManyQueues() {
|
||||
LowRedundancyBlocks neededReconstruction = new LowRedundancyBlocks();
|
||||
BlockInfo block = new BlockInfoContiguous(new Block(), (short)1024);
|
||||
neededReconstruction.add(block, 2, 0, 1, 3);
|
||||
neededReconstruction.add(block, 0, 0, 0, 3);
|
||||
neededReconstruction.remove(block, LowRedundancyBlocks.LEVEL);
|
||||
assertFalse("Should not contain the block.",
|
||||
neededReconstruction.contains(block));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user