fix(core): exponential retry on cache put fail (#29017)
Co-authored-by: Mike <mike.pham@autogeneral.com.au>
This commit is contained in:
parent
82bfb99366
commit
0d9d3fef9d
@ -555,17 +555,20 @@ function tryAndRetry<T>(fn: () => Promise<T>): Promise<T> {
|
||||
let attempts = 0;
|
||||
// Generate a random number between 2 and 4 to raise to the power of attempts
|
||||
const baseExponent = Math.random() * 2 + 2;
|
||||
const baseTimeout = 15;
|
||||
const _try = async () => {
|
||||
try {
|
||||
attempts++;
|
||||
return await fn();
|
||||
} catch (e) {
|
||||
// Max time is 5 * 4^3 = 20480ms
|
||||
// Max time is 15 * (4 + 4² + 4³ + 4⁴ + 4⁵) = 20460ms
|
||||
if (attempts === 6) {
|
||||
// After enough attempts, throw the error
|
||||
throw e;
|
||||
}
|
||||
await new Promise((res) => setTimeout(res, baseExponent ** attempts));
|
||||
await new Promise((res) =>
|
||||
setTimeout(res, baseTimeout * baseExponent ** attempts)
|
||||
);
|
||||
return await _try();
|
||||
}
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user