Package org.keycloak.common.util
Class Retry
- java.lang.Object
-
- org.keycloak.common.util.Retry
-
public class Retry extends Object
- Author:
- Stian Thorgersen
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
Retry.AdvancedRunnable
Runnable, which provides some additional info (iteration for now)static interface
Retry.Supplier<T>
Needed here because: - java.util.function.Supplier defined from Java 8 - Adds some additional info (current iteration)static interface
Retry.ThrowableCallback
Needed here because: - java.util.function.BiConsumer defined from Java 8 - Adds some additional info (current iteration and called throwable
-
Constructor Summary
Constructors Constructor Description Retry()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> T
call(Retry.Supplier<T> supplier, int attemptsCount, long intervalMillis)
Runs the givenrunnable
at mostattemptsCount
times until it passes, leavingintervalMillis
milliseconds between the invocations.static int
execute(Runnable runnable, int attemptsCount, long intervalMillis)
Runs the givenrunnable
at mostattemptsCount
times until it passes, leavingintervalMillis
milliseconds between the invocations.static int
executeWithBackoff(Retry.AdvancedRunnable runnable, int attemptsCount, int intervalBaseMillis)
Runs the givenrunnable
at mostattemptsCount
times until it passes, leaving some increasing random delay milliseconds between the invocations.static int
executeWithBackoff(Retry.AdvancedRunnable runnable, Duration timeout, int intervalBaseMillis)
static int
executeWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, int attemptsCount, int intervalBaseMillis)
static int
executeWithBackoff(Retry.AdvancedRunnable runnable, Retry.ThrowableCallback throwableCallback, Duration timeout, int intervalBaseMillis)
-
-
-
Method Detail
-
execute
public static int execute(Runnable runnable, int attemptsCount, long intervalMillis)
Runs the givenrunnable
at mostattemptsCount
times until it passes, leavingintervalMillis
milliseconds between the invocations. The runnable is reexecuted if it throws aRuntimeException
orAssertionError
.- Parameters:
runnable
-attemptsCount
- Total number of attempts to execute therunnable
intervalMillis
-- Returns:
- Index of the first successful invocation, starting from 0.
-
executeWithBackoff
public static int executeWithBackoff(Retry.AdvancedRunnable runnable, int attemptsCount, int intervalBaseMillis)
Runs the givenrunnable
at mostattemptsCount
times 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 byintervalBaseMillis
number. The runnable is reexecuted if it throws aRuntimeException
orAssertionError
.- Parameters:
runnable
-attemptsCount
- Total number of attempts to execute therunnable
intervalBaseMillis
- 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
public static <T> T call(Retry.Supplier<T> supplier, int attemptsCount, long intervalMillis)
Runs the givenrunnable
at mostattemptsCount
times until it passes, leavingintervalMillis
milliseconds between the invocations. The runnable is reexecuted if it throws aRuntimeException
orAssertionError
.- Parameters:
supplier
-attemptsCount
- Total number of attempts to execute therunnable
intervalMillis
-- Returns:
- Value generated by the
supplier
.
-
-