Skip to content

Commit 2cb0c35

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

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();
@@ -369,11 +369,11 @@ synchronized boolean remove(BlockInfo block,
369369
* @return true if the block was found and removed from one of the priority
370370
* queues
371371
*/
372-
boolean remove(BlockInfo block, int priLevel) {
372+
synchronized boolean remove(BlockInfo block, int priLevel) {
373373
return remove(block, priLevel, block.getReplication());
374374
}
375375

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

0 commit comments

Comments
 (0)