The first delay of DelegateBackoff and ExponentialBackoff is always zero.
yowu opened this issue · comments
WU Yong commented
Let's take look at an example
// use a ConstantBackoff
const constDelayRetry = Policy.handleAll()
.retry()
.attempts(3)
.backoff(new ConstantBackoff(10, 3));
constDelayRetry.onRetry(({ delay }) => console.log('delay for next call: ', delay));
await constDelayRetry.execute(() => {
throw new Error('exception');
});
// use a DelegateBackoff
const delegatedDelayPolicy = Policy.handleAll()
.retry()
.attempts(3)
.backoff(new DelegateBackoff(() => 10));
delegatedDelayPolicy.onRetry(({ delay }) => console.log('delay for next call: ', delay));
await delegatedDelayPolicy.execute(() => {
throw new Error('exception');
});
The output looks like
delay for next call: 10
delay for next call: 10
delay for next call: 10
delay for next call: 0
delay for next call: 10
delay for next call: 10
Conceptually, I would expect all delays are 10, but unfortunately, the first delay of DelegateBackoff
is always 0.
Looks like the ExponentialBackoff
has the same problem.
But Polly doesn't has such problem.
It looks like RetryPolicy.execute
should adjust the logic to backoff.next()
first then do the delay.
Connor Peet commented
Thanks for the issue, I would be happy to take a PR, otherwise I can fix this in a couple days.
Connor Peet commented
Fixed in the linked PR