Skip to content

GH-427: Add fix for the issue with multiplierExpression and randomExp… #428

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 10, 2024
Prev Previous commit
Next Next commit
GH-427: Evaluate multiplierSupplier only at runtime
  • Loading branch information
aftabshk committed May 3, 2024
commit a814391b050ae24aaa4fe8088f6073e2aa5e6abe
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ private BackOffPolicy getBackoffPolicy(Backoff backoff, boolean stateless) {
String randomExpression = (String) attrs.get("randomExpression");
Expression parsedRandomExp = null;

if (getMultiplier(multiplier, parsedMultExp, stateless) > 0) {
if (multiplier > 0 || multiplierExpression != null) {
isRandom = backoff.random();
if (StringUtils.hasText(randomExpression)) {
parsedRandomExp = parse(randomExpression);
Expand All @@ -467,11 +467,6 @@ private BackOffPolicy getBackoffPolicy(Backoff backoff, boolean stateless) {
stateless);
}

private Double getMultiplier(Double multiplier, Expression parsedMultiplierExpression, Boolean stateless) {
return parsedMultiplierExpression != null ? evaluate(parsedMultiplierExpression, Double.class, stateless)
: multiplier;
}

private BackOffPolicy buildBackOff(long min, Expression minExp, long max, Expression maxExp, double multiplier,
Expression multExp, boolean isRandom, Expression randomExp, boolean stateless) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,10 @@
* this to true to have the backoff delays randomized, so that the maximum delay is
* multiplier times the previous delay and the distribution is uniform between the two
* values. Use {@code #{...}} for one-time evaluation during initialization, omit the
* delimiters for evaluation at runtime. This expression is evaluated at configuration
* phase. If it returns true and ({@link #multiplier()} > 1.0) then
* {@link org.springframework.retry.backoff.ExponentialRandomBackOffPolicy} is created
* else {@link org.springframework.retry.backoff.ExponentialBackOffPolicy} is created
* delimiters for evaluation at runtime. This expression is always evaluated at
* configuration phase. If the expression returns true then
* {@link org.springframework.retry.backoff.ExponentialRandomBackOffPolicy} is used
* else {@link org.springframework.retry.backoff.ExponentialBackOffPolicy} is used.
* @return the flag to signal randomization is required (default false)
*/
String randomExpression() default "";
Expand Down