X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Ffair-share-worker-choice-strategy.ts;h=e65575a1e05c805978111cbbf279c5f5a5767e6f;hb=0682ba158c6af9ffc453f38bd7d16438eab97695;hp=f0bc8787a6005e4d896140a220f49ae89b8c391c;hpb=0d80593b9a7596645612087f687fc6f5cab3101a;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 f0bc8787..e65575a1 100644 --- a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts @@ -13,7 +13,7 @@ import type { */ interface WorkerVirtualTaskTimestamp { start: number - end: number + end?: number } /** @@ -58,12 +58,17 @@ export class FairShareWorkerChoiceStrategy< return true } + /** @inheritDoc */ + public update (workerNodeKey: number): boolean { + 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 workerVirtualTaskEndTimestamp = this.workersVirtualTaskTimestamp[workerNodeKey]?.end ?? 0 if (workerVirtualTaskEndTimestamp < minWorkerVirtualTaskEndTimestamp) { @@ -95,7 +100,7 @@ export class FairShareWorkerChoiceStrategy< : this.pool.workerNodes[workerNodeKey].tasksUsage.avgRunTime this.workersVirtualTaskTimestamp[workerNodeKey] = { start: workerVirtualTaskStartTimestamp, - end: workerVirtualTaskStartTimestamp + (workerVirtualTaskTRunTime ?? 0) + end: workerVirtualTaskStartTimestamp + workerVirtualTaskTRunTime } } }