HBASE-25014 ScheduledChore is never triggered when initalDelay > 1.5*period (#2395)
Signed-off-by: Duo Zhang <zhangduo@apache.org> Signed-off-by: Guanghao Zhang <zghao@apache.org>
This commit is contained in:
parent
325317ff9e
commit
ca96f96461
|
@ -270,7 +270,7 @@ public abstract class ScheduledChore implements Runnable {
|
||||||
choreServicer.cancelChore(this, false);
|
choreServicer.cancelChore(this, false);
|
||||||
}
|
}
|
||||||
choreServicer = service;
|
choreServicer = service;
|
||||||
timeOfThisRun = System.currentTimeMillis();
|
timeOfThisRun = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void cancel() {
|
public synchronized void cancel() {
|
||||||
|
|
|
@ -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.SleepingChore;
|
||||||
import org.apache.hadoop.hbase.TestChoreService.ScheduledChoreSamples.SlowChore;
|
import org.apache.hadoop.hbase.TestChoreService.ScheduledChoreSamples.SlowChore;
|
||||||
import org.apache.hadoop.hbase.testclassification.MediumTests;
|
import org.apache.hadoop.hbase.testclassification.MediumTests;
|
||||||
|
import org.apache.hadoop.hbase.util.Threads;
|
||||||
import org.junit.ClassRule;
|
import org.junit.ClassRule;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
|
import org.junit.rules.TestName;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -44,6 +47,9 @@ public class TestChoreService {
|
||||||
|
|
||||||
public static final Logger log = LoggerFactory.getLogger(TestChoreService.class);
|
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
|
* A few ScheduledChore samples that are useful for testing with ChoreService
|
||||||
*/
|
*/
|
||||||
|
@ -570,7 +576,7 @@ public class TestChoreService {
|
||||||
ChoreService service = new ChoreService("testNumberOfChoresMissingStartTime");
|
ChoreService service = new ChoreService("testNumberOfChoresMissingStartTime");
|
||||||
|
|
||||||
final int period = 100;
|
final int period = 100;
|
||||||
final int sleepTime = 5 * period;
|
final int sleepTime = 20 * period;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Slow chores sleep for a length of time LONGER than their period. Thus, SlowChores
|
// 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(service.scheduleChore(failChore3));
|
||||||
assertFalse(failChore3.isScheduled());
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue