X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Fworker-choice-strategy-context.ts;h=0d0d269c076537bd2018cc4cc9450ea43584a6b8;hb=45c29623276af3cc82b7d54db587eea1f0abaa42;hp=2b3c9fb68b33b1d4925f9dab7be3cf14b123bf88;hpb=c7e196baa67e4deb14377afbd9d6d5f655e5c384;p=poolifier.git diff --git a/src/pools/selection-strategies/worker-choice-strategy-context.ts b/src/pools/selection-strategies/worker-choice-strategy-context.ts index 2b3c9fb6..0d0d269c 100644 --- a/src/pools/selection-strategies/worker-choice-strategy-context.ts +++ b/src/pools/selection-strategies/worker-choice-strategy-context.ts @@ -2,6 +2,7 @@ import { DEFAULT_WORKER_CHOICE_STRATEGY_OPTIONS } from '../../utils' import type { IPool } from '../pool' import type { IWorker } from '../worker' import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy' +import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from './interleaved-weighted-round-robin-worker-choice-strategy' import { LessBusyWorkerChoiceStrategy } from './less-busy-worker-choice-strategy' import { LessUsedWorkerChoiceStrategy } from './less-used-worker-choice-strategy' import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy' @@ -83,6 +84,14 @@ export class WorkerChoiceStrategyContext< Data, Response >(pool, opts) + ], + [ + WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN, + new (InterleavedWeightedRoundRobinWorkerChoiceStrategy.bind(this))< + Worker, + Data, + Response + >(pool, opts) ] ]) } @@ -131,13 +140,18 @@ export class WorkerChoiceStrategyContext< * Executes the worker choice strategy algorithm in the context. * * @returns The key of the worker node. + * @throws {@link https://nodejs.org/api/errors.html#class-error} If the worker node key is null or undefined. */ public execute (): number { - return ( + const workerNodeKey = ( this.workerChoiceStrategies.get( this.workerChoiceStrategy ) as IWorkerChoiceStrategy ).choose() + if (workerNodeKey == null) { + throw new Error('Worker node key chosen is null or undefined') + } + return workerNodeKey } /** @@ -160,8 +174,8 @@ export class WorkerChoiceStrategyContext< * @param opts - The worker choice strategy options. */ public setOptions (opts: WorkerChoiceStrategyOptions): void { - this.workerChoiceStrategies.forEach(workerChoiceStrategy => { + for (const workerChoiceStrategy of this.workerChoiceStrategies.values()) { workerChoiceStrategy.setOptions(opts) - }) + } } }