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 RetryPolicypublic int attempts()
attempts in interface RetryPolicypublic Promise<java.time.Duration> delay()
delay in interface RetryPolicyand its implementors for different strategiespublic RetryPolicy increaseAttempt()
increaseAttempt in interface RetryPolicy