GH-464: Fix backOff API in UniformRandomBackOffPolicy
Fixes: #464 Issue link: https://github.com/spring-projects/spring-retry/issues/464 When `maxBackOffPeriod` is less than `minBackOffPeriod`, delta is taken taken as zero in `UniformRandomBackOffPolicy` `backOff()` method. * Update tests to use `DummySleeper` * Extract `UniformRandomBackOffPolicy` `backOffSuppliers` into local variables * Modify `UniformRandomBackOffPolicy` tests
This commit is contained in:
@@ -134,8 +134,8 @@ public class UniformRandomBackOffPolicy extends StatelessBackOffPolicy
|
||||
protected void doBackOff() throws BackOffInterruptedException {
|
||||
try {
|
||||
Long min = this.minBackOffPeriod.get();
|
||||
long delta = this.maxBackOffPeriod.get() == this.minBackOffPeriod.get() ? 0
|
||||
: this.random.nextInt((int) (this.maxBackOffPeriod.get() - min));
|
||||
Long max = this.maxBackOffPeriod.get();
|
||||
long delta = max <= min ? 0 : this.random.nextInt((int) (max - min));
|
||||
this.sleeper.sleep(min + delta);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
|
||||
@@ -36,10 +36,18 @@ public class UniformRandomBackOffPolicyTests {
|
||||
int maxBackOff = 10000;
|
||||
backOffPolicy.setMinBackOffPeriod(minBackOff);
|
||||
backOffPolicy.setMaxBackOffPeriod(maxBackOff);
|
||||
UniformRandomBackOffPolicy withSleeper = backOffPolicy.withSleeper(new DummySleeper());
|
||||
|
||||
DummySleeper dummySleeper = new DummySleeper();
|
||||
UniformRandomBackOffPolicy withSleeper = backOffPolicy.withSleeper(dummySleeper);
|
||||
|
||||
assertThat(withSleeper.getMinBackOffPeriod()).isEqualTo(minBackOff);
|
||||
assertThat(withSleeper.getMaxBackOffPeriod()).isEqualTo(maxBackOff);
|
||||
|
||||
assertThat(dummySleeper.getBackOffs()).isEmpty();
|
||||
withSleeper.backOff(null);
|
||||
|
||||
assertThat(dummySleeper.getBackOffs()).hasSize(1);
|
||||
assertThat(dummySleeper.getBackOffs()[0]).isLessThan(maxBackOff);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -60,4 +68,20 @@ public class UniformRandomBackOffPolicyTests {
|
||||
assertThat(Thread.interrupted()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxBackOffLessThanMinBackOff() {
|
||||
UniformRandomBackOffPolicy backOffPolicy = new UniformRandomBackOffPolicy();
|
||||
int minBackOff = 1000;
|
||||
int maxBackOff = 10;
|
||||
backOffPolicy.setMinBackOffPeriod(minBackOff);
|
||||
backOffPolicy.setMaxBackOffPeriod(maxBackOff);
|
||||
|
||||
DummySleeper dummySleeper = new DummySleeper();
|
||||
UniformRandomBackOffPolicy withSleeper = backOffPolicy.withSleeper(dummySleeper);
|
||||
assertThat(dummySleeper.getBackOffs()).isEmpty();
|
||||
withSleeper.backOff(null);
|
||||
assertThat(dummySleeper.getBackOffs()).hasSize(1);
|
||||
assertThat(dummySleeper.getBackOffs()[0]).isEqualTo(minBackOff);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user