//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.schedules;
import org.apache.uima.fit.descriptor.ConfigurationParameter;
import uk.gov.dstl.baleen.uima.BaleenScheduler;
/**
* A scheduler which runs a job X seconds after it last completed (defined by period).
*
*/
public class FixedDelay extends BaleenScheduler {
/**
* The time in seconds between runs (end of one run to the start of the next)
*
* @baleen.config 0
*/
public static final String PARAM_PERIOD = "period";
@ConfigurationParameter(name = FixedDelay.PARAM_PERIOD, defaultValue = "0")
private long period;
private long lastRunTime = 0;
@Override
protected boolean await() {
return delay();
}
/**
* A helper function for subclasses which will wait for period between runs
*
* @return true, if successful
*/
protected boolean delay() {
if (lastRunTime == 0) {
lastRunTime = System.currentTimeMillis();
return true;
}
// Otherwise block and wait
try {
final long periodInMs = period * 1000;
Thread.sleep(Math.max(0, periodInMs));
lastRunTime = System.currentTimeMillis();
return true;
} catch (final InterruptedException e) {
getMonitor().warn("Interrupted, stopping the scheduler");
return false;
}
}
}