X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Ffair-share-worker-choice-strategy.ts;h=17133408e276191a9f85f1abbdf21209445420ab;hb=138d29a820e8a61d10ba03fe42c5d77596ef788c;hp=e42d54d9fbabbe847731fd7b0387d9bb8a94f642;hpb=08f3f44cef6256fdbab1a2a56842b291fd6dcd42;p=poolifier.git diff --git a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts index e42d54d9..17133408 100644 --- a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts @@ -58,18 +58,23 @@ export class FairShareWorkerChoiceStrategy< return true } + /** @inheritDoc */ + public update (): boolean { + for (const [workerNodeKey] of this.pool.workerNodes.entries()) { + this.computeWorkerVirtualTaskTimestamp(workerNodeKey) + } + return true + } + /** @inheritDoc */ public choose (): number { let minWorkerVirtualTaskEndTimestamp = Infinity let chosenWorkerNodeKey!: number for (const [workerNodeKey] of this.pool.workerNodes.entries()) { - this.computeWorkerVirtualTaskTimestamp(workerNodeKey) - const workerLastVirtualTaskEndTimestamp = + const workerVirtualTaskEndTimestamp = this.workersVirtualTaskTimestamp[workerNodeKey]?.end ?? 0 - if ( - workerLastVirtualTaskEndTimestamp < minWorkerVirtualTaskEndTimestamp - ) { - minWorkerVirtualTaskEndTimestamp = workerLastVirtualTaskEndTimestamp + if (workerVirtualTaskEndTimestamp < minWorkerVirtualTaskEndTimestamp) { + minWorkerVirtualTaskEndTimestamp = workerVirtualTaskEndTimestamp chosenWorkerNodeKey = workerNodeKey } } @@ -97,7 +102,7 @@ export class FairShareWorkerChoiceStrategy< : this.pool.workerNodes[workerNodeKey].tasksUsage.avgRunTime this.workersVirtualTaskTimestamp[workerNodeKey] = { start: workerVirtualTaskStartTimestamp, - end: workerVirtualTaskStartTimestamp + (workerVirtualTaskTRunTime ?? 0) + end: workerVirtualTaskStartTimestamp + workerVirtualTaskTRunTime } } }