Skip to content

Commit d12c16d

Browse files
committed
HDFS-16939. Fix the thread safety bug in LowRedundancyBlocks. (#5450). Contributed by Shuyan Zhang.
Signed-off-by: He Xiaoqiao <hexiaoqiao@apache.org>
1 parent b75ced1 commit d12c16d

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/LowRedundancyBlocks.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ class LowRedundancyBlocks implements Iterable<BlockInfo> {
8686
private final List<LightWeightLinkedSet<BlockInfo>> priorityQueues
8787
= new ArrayList<>(LEVEL);
8888

89-
/** The number of corrupt blocks with replication factor 1 */
9089

9190
private final LongAdder lowRedundancyBlocks = new LongAdder();
9291
private final LongAdder corruptBlocks = new LongAdder();
92+
/** The number of corrupt blocks with replication factor 1 */
9393
private final LongAdder corruptReplicationOneBlocks = new LongAdder();
9494
private final LongAdder lowRedundancyECBlockGroups = new LongAdder();
9595
private final LongAdder corruptECBlockGroups = new LongAdder();
@@ -367,11 +367,11 @@ synchronized boolean remove(BlockInfo block,
367367
* @return true if the block was found and removed from one of the priority
368368
* queues
369369
*/
370-
boolean remove(BlockInfo block, int priLevel) {
370+
synchronized boolean remove(BlockInfo block, int priLevel) {
371371
return remove(block, priLevel, block.getReplication());
372372
}
373373

374-
boolean remove(BlockInfo block, int priLevel, int oldExpectedReplicas) {
374+
synchronized boolean remove(BlockInfo block, int priLevel, int oldExpectedReplicas) {
375375
if(priLevel >= 0 && priLevel < LEVEL
376376
&& priorityQueues.get(priLevel).remove(block)) {
377377
NameNode.blockStateChangeLog.debug(

0 commit comments

Comments
 (0)