From f29a9136924a08407ae407151468630d2f8559ba Mon Sep 17 00:00:00 2001 From: Daniel Alfonsetti Date: Mon, 21 Aug 2023 18:23:53 -0400 Subject: [PATCH] Exponential delay and jitter --- .../plugin/naginator/ExponentialDelay.java | 59 +++++++++++++++++++ .../naginator/ExponentialDelay/config.jelly | 9 +++ 2 files changed, 68 insertions(+) create mode 100644 src/main/java/com/chikli/hudson/plugin/naginator/ExponentialDelay.java create mode 100644 src/main/resources/com/chikli/hudson/plugin/naginator/ExponentialDelay/config.jelly diff --git a/src/main/java/com/chikli/hudson/plugin/naginator/ExponentialDelay.java b/src/main/java/com/chikli/hudson/plugin/naginator/ExponentialDelay.java new file mode 100644 index 0000000..05367d2 --- /dev/null +++ b/src/main/java/com/chikli/hudson/plugin/naginator/ExponentialDelay.java @@ -0,0 +1,59 @@ +package com.chikli.hudson.plugin.naginator; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.model.AbstractBuild; +import org.kohsuke.stapler.DataBoundConstructor; +import static java.lang.Math.min; + +/** + * Need to make a fork. + * Expontential delay + * @author Daniel Alfonsetti + */ +public class ExponentialDelay extends ScheduleDelay { + + private int backoffBase; + private int max; + + @DataBoundConstructor + public ExponentialDelay(int backoff_base, int max) { + this.backoffBase = backoff_base; + this.max = max; + } + + public int getBackoffBase() { + return backoffBase; + } + + public int getMax() { + return max; + } + + // number of seconds. + @Override + public int computeScheduleDelay(AbstractBuild failedBuild) { + // int n = getRetryCount(failedBuild); + // // int delay = (int) Math.pow(this.backoffBase, n); + // int delay = 50+n; + // return max <= 0 ? delay : min(delay, max); + return 1; + } + + private int getRetryCount(AbstractBuild failedBuild) { + NaginatorAction action = failedBuild.getAction(NaginatorAction.class); + if (action == null) { + return 0; + } + return action.getRetryCount(); + } + + @Extension + public static class DescriptorImpl extends ScheduleDelayDescriptor { + @NonNull + @Override + public String getDisplayName() { + return "Exponential"; + } + } +} diff --git a/src/main/resources/com/chikli/hudson/plugin/naginator/ExponentialDelay/config.jelly b/src/main/resources/com/chikli/hudson/plugin/naginator/ExponentialDelay/config.jelly new file mode 100644 index 0000000..cf8d261 --- /dev/null +++ b/src/main/resources/com/chikli/hudson/plugin/naginator/ExponentialDelay/config.jelly @@ -0,0 +1,9 @@ + + + + + + + + +