Package org.keycloak.common.util
Class Retry
java.lang.Object
org.keycloak.common.util.Retry
- Author:
- Stian Thorgersen
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceRunnable, which provides some additional info (iteration for now)static interfaceNeeded here because: - java.util.function.Supplier defined from Java 8 - Adds some additional info (current iteration)static interfaceNeeded here because: - java.util.function.BiConsumer defined from Java 8 - Adds some additional info (current iteration and called throwable -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> Tcall(Retry.Supplier<T> supplier, int attemptsCount, long intervalMillis) Runs the givenrunnableat mostattemptsCounttimes until it passes, leavingintervalMillismilliseconds between the invocations.static intRuns the givenrunnableat mostattemptsCounttimes until it passes, leavingintervalMillismilliseconds between the invocations.static intexecuteWithBackoff(Retry.AdvancedRunnable runnable, int attemptsCount, int intervalBaseMillis) Runs the givenrunnableat mostattemptsCounttimes until it passes, leaving some increasing random delay milliseconds between the invocations.static intexecuteWithBackoff(Retry.AdvancedRunnable runnable, Duration timeout, int intervalBaseMillis) static intexecuteWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, int attemptsCount, int intervalBaseMillis) static intexecuteWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, Duration timeout, int intervalBaseMillis)
-
Constructor Details
-
Retry
public Retry()
-
-
Method Details
-
execute
Runs the givenrunnableat mostattemptsCounttimes until it passes, leavingintervalMillismilliseconds between the invocations. The runnable is reexecuted if it throws aRuntimeExceptionorAssertionError.- Parameters:
runnable-attemptsCount- Total number of attempts to execute therunnableintervalMillis-- Returns:
- Index of the first successful invocation, starting from 0.
-
executeWithBackoff
public static int executeWithBackoff(Retry.AdvancedRunnable runnable, int attemptsCount, int intervalBaseMillis) Runs the givenrunnableat mostattemptsCounttimes until it passes, leaving some increasing random delay milliseconds between the invocations. It uses Exponential backoff + jitter algorithm to compute the delay. More details https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ The base for delay is specified byintervalBaseMillisnumber. The runnable is reexecuted if it throws aRuntimeExceptionorAssertionError.- Parameters:
runnable-attemptsCount- Total number of attempts to execute therunnableintervalBaseMillis- base for the exponential backoff + jitter- Returns:
- Index of the first successful invocation, starting from 0.
-
executeWithBackoff
public static int executeWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, int attemptsCount, int intervalBaseMillis) -
executeWithBackoff
public static int executeWithBackoff(Retry.AdvancedRunnable runnable, Duration timeout, int intervalBaseMillis) -
executeWithBackoff
public static int executeWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, Duration timeout, int intervalBaseMillis) -
call
Runs the givenrunnableat mostattemptsCounttimes until it passes, leavingintervalMillismilliseconds between the invocations. The runnable is reexecuted if it throws aRuntimeExceptionorAssertionError.- Parameters:
supplier-attemptsCount- Total number of attempts to execute therunnableintervalMillis-- Returns:
- Value generated by the
supplier.
-