Parcourir la source

HDFS-16426. Fix nextBlockReportTime when trigger full block report force (#3887)

qinyuren il y a 3 ans
Parent
commit
fcb1076699

+ 1 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java

@@ -1271,6 +1271,7 @@ class BPServiceActor implements Runnable {
 
 
     void forceFullBlockReportNow() {
     void forceFullBlockReportNow() {
       forceFullBlockReport.set(true);
       forceFullBlockReport.set(true);
+      resetBlockReportTime = true;
     }
     }
 
 
     /**
     /**

+ 17 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestBpServiceActorScheduler.java

@@ -141,6 +141,23 @@ public class TestBpServiceActorScheduler {
     }
     }
   }
   }
 
 
+  /**
+   * 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
   @Test
   public void testScheduleHeartbeat() {
   public void testScheduleHeartbeat() {
     for (final long now : getTimestamps()) {
     for (final long now : getTimestamps()) {