X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Fworker-choice-strategies-context.ts;h=7e633e164f7c93d96661cd0bd0b6be1226f09e32;hb=f7a08a34fc67a4c4406798c85f1ad669a7d53223;hp=2650dd373ddf2b4ffe1395553993ba1792ad1ecd;hpb=bcfb06ce041a682baf396a099c633a848d6a4045;p=poolifier.git diff --git a/src/pools/selection-strategies/worker-choice-strategies-context.ts b/src/pools/selection-strategies/worker-choice-strategies-context.ts index 2650dd37..7e633e16 100644 --- a/src/pools/selection-strategies/worker-choice-strategies-context.ts +++ b/src/pools/selection-strategies/worker-choice-strategies-context.ts @@ -72,11 +72,14 @@ export class WorkerChoiceStrategiesContext< this.addWorkerChoiceStrategy(workerChoiceStrategy, this.pool, opts) } this.retriesCount = 0 - this.retries = getWorkerChoiceStrategiesRetries(this.pool, opts) + this.retries = getWorkerChoiceStrategiesRetries( + this.pool, + opts + ) } /** - * Gets the active worker choice strategies policy in the context. + * Gets the active worker choice strategies in the context policy. * * @returns The strategies policy. */ @@ -132,8 +135,10 @@ export class WorkerChoiceStrategiesContext< workerChoiceStrategy: WorkerChoiceStrategy, opts?: WorkerChoiceStrategyOptions ): void { - this.defaultWorkerChoiceStrategy = workerChoiceStrategy - this.addWorkerChoiceStrategy(workerChoiceStrategy, this.pool, opts) + if (workerChoiceStrategy !== this.defaultWorkerChoiceStrategy) { + this.defaultWorkerChoiceStrategy = workerChoiceStrategy + this.addWorkerChoiceStrategy(workerChoiceStrategy, this.pool, opts) + } } /** @@ -218,6 +223,35 @@ export class WorkerChoiceStrategiesContext< } } + /** + * Synchronizes the active worker choice strategies in the context with the given worker choice strategies. + * + * @param workerChoiceStrategies - The worker choice strategies to synchronize. + * @param opts - The worker choice strategy options. + */ + public syncWorkerChoiceStrategies ( + workerChoiceStrategies: Set, + opts?: WorkerChoiceStrategyOptions + ): void { + for (const workerChoiceStrategy of this.workerChoiceStrategies.keys()) { + if (!workerChoiceStrategies.has(workerChoiceStrategy)) { + this.removeWorkerChoiceStrategy(workerChoiceStrategy) + } + } + for (const workerChoiceStrategy of workerChoiceStrategies) { + if (!this.workerChoiceStrategies.has(workerChoiceStrategy)) { + this.addWorkerChoiceStrategy(workerChoiceStrategy, this.pool, opts) + } + } + } + + /** + * Adds a worker choice strategy to the context. + * + * @param workerChoiceStrategy - The worker choice strategy to add. + * @param opts - The worker choice strategy options. + * @returns The worker choice strategies. + */ private addWorkerChoiceStrategy ( workerChoiceStrategy: WorkerChoiceStrategy, pool: IPool, @@ -237,9 +271,15 @@ export class WorkerChoiceStrategiesContext< return this.workerChoiceStrategies } - // private removeWorkerChoiceStrategy ( - // workerChoiceStrategy: WorkerChoiceStrategy - // ): boolean { - // return this.workerChoiceStrategies.delete(workerChoiceStrategy) - // } + /** + * Removes a worker choice strategy from the context. + * + * @param workerChoiceStrategy - The worker choice strategy to remove. + * @returns `true` if the worker choice strategy is removed, `false` otherwise. + */ + private removeWorkerChoiceStrategy ( + workerChoiceStrategy: WorkerChoiceStrategy + ): boolean { + return this.workerChoiceStrategies.delete(workerChoiceStrategy) + } }