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);
+ }
+ }
}