diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java index fe83700d6f994..f1fc51eb1d14d 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java @@ -1271,6 +1271,7 @@ boolean isOutliersReportDue(long curTime) { void forceFullBlockReportNow() { forceFullBlockReport.set(true); + resetBlockReportTime = true; } /** diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestBpServiceActorScheduler.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestBpServiceActorScheduler.java index b07e9e461f19b..f8406ed7a3fae 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestBpServiceActorScheduler.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestBpServiceActorScheduler.java @@ -141,6 +141,23 @@ public void testScheduleNextBlockReport3() { } } + /** + * force trigger full block report multi times, the next block report + * must be scheduled in the range (now + BLOCK_REPORT_INTERVAL_SEC). + */ + @Test + public void testScheduleNextBlockReport4() { + for (final long now : getTimestamps()) { + Scheduler scheduler = makeMockScheduler(now); + for (int i = 0; i < getTimestamps().size(); ++i) { + scheduler.forceFullBlockReportNow(); + scheduler.scheduleNextBlockReport(); + } + assertTrue(scheduler.getNextBlockReportTime() - now >= 0); + assertTrue(scheduler.getNextBlockReportTime() - now <= BLOCK_REPORT_INTERVAL_MS); + } + } + @Test public void testScheduleHeartbeat() { for (final long now : getTimestamps()) {