package com.nurkiewicz.asyncretry.backoff;
import com.nurkiewicz.asyncretry.RetryContext;
/**
* @author Tomasz Nurkiewicz
* @since 7/17/13, 11:15 PM
*/
public interface Backoff {
Backoff DEFAULT = new FixedIntervalBackoff();
long delayMillis(RetryContext context);
default Backoff withUniformJitter() {
return new UniformRandomBackoff(this);
}
default Backoff withUniformJitter(long range) {
return new UniformRandomBackoff(this, range);
}
default Backoff withProportionalJitter() {
return new ProportionalRandomBackoff(this);
}
default Backoff withProportionalJitter(double multiplier) {
return new ProportionalRandomBackoff(this, multiplier);
}
default Backoff withMinDelay(long minDelayMillis) {
return new BoundedMinBackoff(this, minDelayMillis);
}
default Backoff withMinDelay() {
return new BoundedMinBackoff(this);
}
default Backoff withMaxDelay(long maxDelayMillis) {
return new BoundedMaxBackoff(this, maxDelayMillis);
}
default Backoff withMaxDelay() {
return new BoundedMaxBackoff(this);
}
default Backoff withFirstRetryNoDelay() {
return new FirstRetryNoDelayBackoff(this);
}
}