X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils.ts;h=c92edc91de4f68100baefe6c5fd14ded17492363;hb=0ffa432eaff319902a2657c5e44374ea109cfb87;hp=45e4fd2393d0533a5256754eec9075666a7f7ea1;hpb=008512c74c553d4400f3fabb46053e5e8a4a0cd1;p=poolifier.git diff --git a/src/utils.ts b/src/utils.ts index 45e4fd23..c92edc91 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -23,6 +23,7 @@ export const EMPTY_FUNCTION: () => void = Object.freeze(() => { */ export const DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS: WorkerChoiceStrategyOptions = { + choiceRetries: 6, runTime: { median: false }, waitTime: { median: false }, elu: { median: false } @@ -57,6 +58,22 @@ export const availableParallelism = (): number => { return availableParallelism } +/** + * Computes the retry delay in milliseconds using an exponential back off algorithm. + * + * @param retryNumber - The number of retries that have already been attempted + * @param maxDelayRatio - The maximum ratio of the delay that can be randomized + * @returns Delay in milliseconds + */ +export const exponentialDelay = ( + retryNumber = 0, + maxDelayRatio = 0.2 +): number => { + const delay = Math.pow(2, retryNumber) * 100 + const randomSum = delay * maxDelayRatio * Math.random() // 0-(maxDelayRatio*100)% of the delay + return delay + randomSum +} + /** * Computes the median of the given data set. *