fix: fix faire share worker choice stategy internals update
[poolifier.git] / src / pools / selection-strategies / fair-share-worker-choice-strategy.ts
index e42d54d9fbabbe847731fd7b0387d9bb8a94f642..17133408e276191a9f85f1abbdf21209445420ab 100644 (file)
@@ -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
     }
   }
 }