public class DurationRetryPolicy extends java.lang.Object implements RetryPolicy
RetryPolicy
.
This strategy will signal end of retries when the elapsed time from the first error occurrence surpasses the configurable max duration, 30 seconds by default.
import ratpack.exec.ExecResult;
import ratpack.exec.Promise;
import ratpack.exec.util.retry.DurationRetryPolicy;
import ratpack.exec.util.retry.RetryPolicy;
import ratpack.exec.util.retry.FixedDelay;
import ratpack.test.exec.ExecHarness;
import ratpack.test.internal.time.FixedWindableClock;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneOffset;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
public class Example {
private static final List<String> LOG = new LinkedList<>();
public static void main(String... args) throws Exception {
AtomicInteger source = new AtomicInteger();
FixedWindableClock clock = new FixedWindableClock(Instant.now(), ZoneOffset.UTC);
RetryPolicy retryPolicy = DurationRetryPolicy.of(b -> b
.delay(FixedDelay.of(Duration.ofMillis(500)))
.maxDuration(Duration.ofSeconds(10))
.clock(clock));
RuntimeException e = new RuntimeException("!");
Throwable result = ExecHarness.yieldSingle(exec ->
Promise.sync(source::incrementAndGet)
.mapIf(i -> i == 3, i -> {
clock.windClock(Duration.ofMinutes(5));
return i;
})
.map(i -> { throw new IllegalStateException(); })
.retry(retryPolicy, (i, t) -> LOG.add("retry attempt: " + i))
).getThrowable();
assertEquals("java.lang.IllegalStateException", result.getClass().getCanonicalName());
assertEquals(Arrays.asList("retry attempt: 1", "retry attempt: 2"), LOG);
}
}
DurationRetryPolicyBuilder
Constructor and Description |
---|
DurationRetryPolicy(Delay delay,
java.time.Duration maxDuration,
java.time.Clock clock) |
Modifier and Type | Method and Description |
---|---|
int |
attempts()
Attempts performed so far.
|
Promise<java.time.Duration> |
delay()
Promise that returns the waiting time before retrying.
|
RetryPolicy |
increaseAttempt()
Increase number of attempts.
|
boolean |
isExhausted()
If the caller should stop retrying.
|
static DurationRetryPolicy |
of(Action<? super DurationRetryPolicyBuilder> definition)
Builds a new duration based retry policy from the given definition.
|
public DurationRetryPolicy(Delay delay, java.time.Duration maxDuration, java.time.Clock clock)
public static DurationRetryPolicy of(Action<? super DurationRetryPolicyBuilder> definition) throws java.lang.Exception
definition
- the duration based retry policy definitionjava.lang.Exception
- any thrown by building the duration based retry policypublic boolean isExhausted()
isExhausted
in interface RetryPolicy
public int attempts()
attempts
in interface RetryPolicy
public Promise<java.time.Duration> delay()
delay
in interface RetryPolicy
and its implementors for different strategies
public RetryPolicy increaseAttempt()
increaseAttempt
in interface RetryPolicy