Skip to content

Commit 962c138

Browse files
author
dukhlov
committed
Fix Cron periodic work to run at the beginning of each minute.
In previous implementation, initially invocation time is aligned to the of the first minute, but eventually 1-minute period can flow because of local clock inaccuracy. This commit fixes this by dynamic calculation of delay before execution.
1 parent 0f7c5f6 commit 962c138

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

  • src/main/java/org/jenkinsci/plugins/parameterizedscheduler

src/main/java/org/jenkinsci/plugins/parameterizedscheduler/Cron.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,32 @@
22

33
import hudson.Extension;
44
import hudson.model.AbstractProject;
5-
import hudson.model.PeriodicWork;
5+
import hudson.model.AperiodicWork;
66
import hudson.triggers.Trigger;
77
import jenkins.model.Jenkins;
88
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
99

1010
import java.util.Calendar;
1111
import java.util.Collection;
1212
import java.util.GregorianCalendar;
13-
import java.util.concurrent.TimeUnit;
1413
import java.util.logging.Level;
1514
import java.util.logging.Logger;
1615

1716
@Extension
18-
public class Cron extends PeriodicWork {
17+
public class Cron extends AperiodicWork {
1918
private static final Logger LOGGER = Logger.getLogger(Cron.class.getName());
2019

20+
// time constants
21+
protected static final long MIN = 1000 * 60;
22+
23+
@Override
24+
public AperiodicWork getNewInstance() {
25+
return new Cron();
26+
}
27+
2128
@Override
2229
public long getRecurrencePeriod() {
23-
return TimeUnit.MINUTES.toMillis(1);
30+
return getInitialDelay();
2431
}
2532

2633
@Override
@@ -29,7 +36,7 @@ public long getInitialDelay() {
2936
}
3037

3138
@Override
32-
protected void doRun() {
39+
protected void doAperiodicRun() {
3340
Jenkins instance = Jenkins.get();
3441

3542
for (AbstractProject<?, ?> project : instance.allItems(AbstractProject.class)) {

0 commit comments

Comments
 (0)