Skip to content

Commit 32f16ae

Browse files
committed
fix(retry): preserve sub-second retry delays
Signed-off-by: Max Lambrecht <maxlambrecht@gmail.com>
1 parent 85f1c46 commit 32f16ae

2 files changed

Lines changed: 23 additions & 8 deletions

File tree

java-spiffe-core/src/main/java/io/spiffe/workloadapi/retry/RetryHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public boolean scheduleRetry(final Runnable runnable) {
3939
}
4040

4141
try {
42-
executor.schedule(runnable, nextDelay.getSeconds(), TimeUnit.SECONDS);
42+
executor.schedule(runnable, nextDelay.toMillis(), TimeUnit.MILLISECONDS);
4343
} catch (RejectedExecutionException e) {
4444
return false;
4545
}

java-spiffe-core/src/test/java/io/spiffe/workloadapi/retry/RetryHandlerTest.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,38 @@ void testScheduleRetry_defaultPolicy() {
4242

4343
assertTrue(retryHandler.scheduleRetry(runnable));
4444

45-
verify(scheduledExecutorService).schedule(runnable, 1, TimeUnit.SECONDS);
45+
verify(scheduledExecutorService).schedule(runnable, 1000, TimeUnit.MILLISECONDS);
4646
assertEquals(1, retryHandler.getRetryCount());
4747

4848
// second retry
4949
assertTrue(retryHandler.scheduleRetry(runnable));
5050
assertEquals(2, retryHandler.getRetryCount());
51-
verify(scheduledExecutorService).schedule(runnable, 2, TimeUnit.SECONDS);
51+
verify(scheduledExecutorService).schedule(runnable, 2000, TimeUnit.MILLISECONDS);
5252

5353
// third retry
5454
assertTrue(retryHandler.scheduleRetry(runnable));
5555
assertEquals(3, retryHandler.getRetryCount());
56-
verify(scheduledExecutorService).schedule(runnable, 4, TimeUnit.SECONDS);
56+
verify(scheduledExecutorService).schedule(runnable, 4000, TimeUnit.MILLISECONDS);
5757

5858
// fourth retry
5959
assertTrue(retryHandler.scheduleRetry(runnable));
6060
assertEquals(4, retryHandler.getRetryCount());
61-
verify(scheduledExecutorService).schedule(runnable, 8, TimeUnit.SECONDS);
61+
verify(scheduledExecutorService).schedule(runnable, 8000, TimeUnit.MILLISECONDS);
62+
}
63+
64+
@Test
65+
void testScheduleRetry_subSecondDelay_usesMilliseconds() {
66+
Runnable runnable = () -> { };
67+
ExponentialBackoffPolicy exponentialBackoffPolicy = ExponentialBackoffPolicy.builder()
68+
.initialDelay(Duration.ofMillis(250))
69+
.build();
70+
71+
RetryHandler retryHandler = new RetryHandler(exponentialBackoffPolicy, scheduledExecutorService);
72+
73+
retryHandler.scheduleRetry(runnable);
74+
75+
verify(scheduledExecutorService).schedule(runnable, 250, TimeUnit.MILLISECONDS);
76+
assertEquals(1, retryHandler.getRetryCount());
6277
}
6378

6479
@Test
@@ -70,18 +85,18 @@ void testScheduleRetry_maxRetries() {
7085

7186
assertTrue(retryHandler.scheduleRetry(runnable));
7287

73-
verify(scheduledExecutorService).schedule(runnable, 1, TimeUnit.SECONDS);
88+
verify(scheduledExecutorService).schedule(runnable, 1000, TimeUnit.MILLISECONDS);
7489
assertEquals(1, retryHandler.getRetryCount());
7590

7691
// second retry
7792
assertTrue(retryHandler.scheduleRetry(runnable));
7893
assertEquals(2, retryHandler.getRetryCount());
79-
verify(scheduledExecutorService).schedule(runnable, 2, TimeUnit.SECONDS);
94+
verify(scheduledExecutorService).schedule(runnable, 2000, TimeUnit.MILLISECONDS);
8095

8196
// third retry
8297
assertTrue(retryHandler.scheduleRetry(runnable));
8398
assertEquals(3, retryHandler.getRetryCount());
84-
verify(scheduledExecutorService).schedule(runnable, 4, TimeUnit.SECONDS);
99+
verify(scheduledExecutorService).schedule(runnable, 4000, TimeUnit.MILLISECONDS);
85100

86101
Mockito.reset(scheduledExecutorService);
87102

0 commit comments

Comments
 (0)