You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/09/16 01:09:45 UTC

[hbase] 01/02: HBASE-25014 ScheduledChore is never triggered when initalDelay > 1.5*period (#2395)

This is an automated email from the ASF dual-hosted git repository.

zghao pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 4d012db00fb06c1af1fda52ad7aebb002793d7c8
Author: XinSun <dd...@gmail.com>
AuthorDate: Wed Sep 16 09:00:21 2020 +0800

    HBASE-25014 ScheduledChore is never triggered when initalDelay > 1.5*period (#2395)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
    Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
 .../org/apache/hadoop/hbase/ScheduledChore.java    |  2 +-
 .../org/apache/hadoop/hbase/TestChoreService.java  | 25 +++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ScheduledChore.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ScheduledChore.java
index 4bfacee..a009cf4 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/ScheduledChore.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ScheduledChore.java
@@ -270,7 +270,7 @@ public abstract class ScheduledChore implements Runnable {
       choreServicer.cancelChore(this, false);
     }
     choreServicer = service;
-    timeOfThisRun = System.currentTimeMillis();
+    timeOfThisRun = -1;
   }
 
   public synchronized void cancel() {
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestChoreService.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestChoreService.java
index 0a7b978..69a171c 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestChoreService.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestChoreService.java
@@ -29,9 +29,12 @@ import org.apache.hadoop.hbase.TestChoreService.ScheduledChoreSamples.SampleStop
 import org.apache.hadoop.hbase.TestChoreService.ScheduledChoreSamples.SleepingChore;
 import org.apache.hadoop.hbase.TestChoreService.ScheduledChoreSamples.SlowChore;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
+import org.apache.hadoop.hbase.util.Threads;
 import org.junit.ClassRule;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,6 +47,9 @@ public class TestChoreService {
 
   public static final Logger log = LoggerFactory.getLogger(TestChoreService.class);
 
+  @Rule
+  public TestName name = new TestName();
+
   /**
    * A few ScheduledChore samples that are useful for testing with ChoreService
    */
@@ -570,7 +576,7 @@ public class TestChoreService {
     ChoreService service = new ChoreService("testNumberOfChoresMissingStartTime");
 
     final int period = 100;
-    final int sleepTime = 5 * period;
+    final int sleepTime = 20 * period;
 
     try {
       // Slow chores sleep for a length of time LONGER than their period. Thus, SlowChores
@@ -835,4 +841,21 @@ public class TestChoreService {
     assertFalse(service.scheduleChore(failChore3));
     assertFalse(failChore3.isScheduled());
   }
+
+  /**
+   * for HBASE-25014
+   */
+  @Test(timeout = 10000)
+  public void testInitialDelay() {
+    ChoreService service = new ChoreService(name.getMethodName());
+    SampleStopper stopper = new SampleStopper();
+    service.scheduleChore(new ScheduledChore("chore", stopper, 1000, 2000) {
+      @Override protected void chore() {
+        stopper.stop("test");
+      }
+    });
+    while (!stopper.isStopped()) {
+      Threads.sleep(1000);
+    }
+  }
 }