diff options
author | Sebastian <sebasjm@gmail.com> | 2022-01-13 01:33:03 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-01-13 01:34:16 -0300 |
commit | 4b289cde5d362c863bee84dc3aa8fbe06b747b41 (patch) | |
tree | ed6d9ee0148fc8ef1b1cfca9f8921240c156dab3 | |
parent | f6ec105b72ab5b79b934b8a4c1626b019c31c4a2 (diff) |
adding a max timeout since retry counter can be very high
-rw-r--r-- | packages/taler-wallet-core/src/util/retries.ts | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/packages/taler-wallet-core/src/util/retries.ts b/packages/taler-wallet-core/src/util/retries.ts index cac7b1b52..8dec22bed 100644 --- a/packages/taler-wallet-core/src/util/retries.ts +++ b/packages/taler-wallet-core/src/util/retries.ts @@ -32,11 +32,13 @@ export interface RetryInfo { export interface RetryPolicy { readonly backoffDelta: Duration; readonly backoffBase: number; + readonly maxTimeout: Duration; } const defaultRetryPolicy: RetryPolicy = { backoffBase: 1.5, backoffDelta: { d_ms: 200 }, + maxTimeout: { d_ms: 6000 }, }; export function updateRetryInfoTimeout( @@ -51,8 +53,11 @@ export function updateRetryInfoTimeout( r.nextRetry = { t_ms: "never" }; return; } + + const nextIncrement = p.backoffDelta.d_ms * Math.pow(p.backoffBase, r.retryCounter) + const t = - now.t_ms + p.backoffDelta.d_ms * Math.pow(p.backoffBase, r.retryCounter); + now.t_ms + (p.maxTimeout.d_ms === "forever" ? nextIncrement : Math.min(p.maxTimeout.d_ms, nextIncrement)); r.nextRetry = { t_ms: t }; } @@ -68,7 +73,7 @@ export function getRetryDuration( return { d_ms: "forever" }; } const t = p.backoffDelta.d_ms * Math.pow(p.backoffBase, r.retryCounter); - return { d_ms: t }; + return { d_ms: p.maxTimeout.d_ms === "forever" ? t : Math.min(p.maxTimeout.d_ms, t) }; } export function initRetryInfo( |