X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpools%2Fselection-strategies%2Fweighted-round-robin-worker-choice-strategy.ts;h=701e51656366369abadb22edcadca5c3e03c90fe;hb=7c7bb28936c5de8829dba0794760498077d3ea90;hp=1aab3d1c6fdfd82ace0147aa27a6ce67be7b2cf8;hpb=5623b8d539e054f846e86b1f8b3d2e60be748330;p=poolifier.git diff --git a/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts b/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts index 1aab3d1c..701e5165 100644 --- a/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/weighted-round-robin-worker-choice-strategy.ts @@ -81,6 +81,8 @@ export class WeightedRoundRobinWorkerChoiceStrategy< this.weightedRoundRobinNextWorkerNodeKey() if (!this.isWorkerNodeEligible(this.nextWorkerNodeKey as number)) { this.nextWorkerNodeKey = undefined + this.previousWorkerNodeKey = + chosenWorkerNodeKey ?? this.previousWorkerNodeKey } return chosenWorkerNodeKey } @@ -101,17 +103,20 @@ export class WeightedRoundRobinWorkerChoiceStrategy< private weightedRoundRobinNextWorkerNodeKey (): number | undefined { const workerVirtualTaskRunTime = this.workerVirtualTaskRunTime const workerWeight = - this.opts.weights?.[this.nextWorkerNodeKey ?? 0] ?? - this.defaultWorkerWeight + this.opts.weights?.[ + this.nextWorkerNodeKey ?? this.previousWorkerNodeKey + ] ?? this.defaultWorkerWeight if (workerVirtualTaskRunTime < workerWeight) { this.workerVirtualTaskRunTime = workerVirtualTaskRunTime + - this.getWorkerTaskRunTime(this.nextWorkerNodeKey ?? 0) + this.getWorkerTaskRunTime( + this.nextWorkerNodeKey ?? this.previousWorkerNodeKey + ) } else { this.nextWorkerNodeKey = this.nextWorkerNodeKey === this.pool.workerNodes.length - 1 ? 0 - : (this.nextWorkerNodeKey ?? 0) + 1 + : (this.nextWorkerNodeKey ?? this.previousWorkerNodeKey) + 1 this.workerVirtualTaskRunTime = 0 } return this.nextWorkerNodeKey