From 91f7ff3a9989a9a18398cf8c82b1e30492a86bad Mon Sep 17 00:00:00 2001 From: "zengqiang.xu" Date: Sun, 5 Jun 2022 22:50:47 +0800 Subject: [PATCH] HDFS-16622. addRDBI in IncrementalBlockReportManager may remove the block with bigger GS --- .../datanode/IncrementalBlockReportManager.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/IncrementalBlockReportManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/IncrementalBlockReportManager.java index 42f3173f6cdb9..088080476c0b9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/IncrementalBlockReportManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/IncrementalBlockReportManager.java @@ -251,12 +251,20 @@ synchronized void addRDBI(ReceivedDeletedBlockInfo rdbi, DatanodeStorage storage) { // Make sure another entry for the same block is first removed. // There may only be one such entry. + ReceivedDeletedBlockInfo removedInfo = null; for (PerStorageIBR perStorage : pendingIBRs.values()) { - if (perStorage.remove(rdbi.getBlock()) != null) { + removedInfo = perStorage.remove(rdbi.getBlock()); + if (removedInfo != null) { break; } } - getPerStorageIBR(storage).put(rdbi); + if (removedInfo != null && + removedInfo.getBlock().getGenerationStamp() + > rdbi.getBlock().getGenerationStamp()) { + getPerStorageIBR(storage).put(removedInfo); + } else { + getPerStorageIBR(storage).put(rdbi); + } } synchronized void notifyNamenodeBlock(ReceivedDeletedBlockInfo rdbi,