build(deps-dev): apply updates
[poolifier.git] / src / pools / selection-strategies / fair-share-worker-choice-strategy.ts
index 2f2686e9bb0f5f6a6c18aa5ce51c913e9d3af7c5..88e12b94fa8ef50b50ede22026e95f0242000d45 100644 (file)
@@ -5,13 +5,12 @@ import {
   type IWorkerChoiceStrategy,
   Measurements,
   type TaskStatisticsRequirements,
-  type WorkerChoiceStrategyOptions
+  type WorkerChoiceStrategyOptions,
 } from './selection-strategies-types.js'
 
 /**
  * Selects the next worker with a fair share scheduling algorithm.
  * Loosely modeled after the fair queueing algorithm: https://en.wikipedia.org/wiki/Fair_queuing.
- *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
  * @typeParam Response - Type of execution response. This can only be structured-cloneable data.
@@ -28,18 +27,18 @@ export class FairShareWorkerChoiceStrategy<
     runTime: {
       aggregate: true,
       average: true,
-      median: false
+      median: false,
     },
     waitTime: {
       aggregate: true,
       average: true,
-      median: false
+      median: false,
     },
     elu: {
       aggregate: true,
       average: true,
-      median: false
-    }
+      median: false,
+    },
   }
 
   /** @inheritDoc */
@@ -63,7 +62,7 @@ export class FairShareWorkerChoiceStrategy<
   public update (workerNodeKey: number): boolean {
     this.pool.workerNodes[workerNodeKey].strategyData = {
       virtualTaskEndTimestamp:
-        this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+        this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
     }
     return true
   }
@@ -81,15 +80,12 @@ export class FairShareWorkerChoiceStrategy<
   }
 
   private fairShareNextWorkerNodeKey (): number | undefined {
-    if (this.pool.workerNodes.length === 0) {
-      return undefined
-    }
     return this.pool.workerNodes.reduce(
       (minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
         if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
           workerNode.strategyData = {
             virtualTaskEndTimestamp:
-              this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+              this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
           }
         }
         return this.isWorkerNodeReady(workerNodeKey) &&
@@ -106,7 +102,6 @@ export class FairShareWorkerChoiceStrategy<
 
   /**
    * Computes the worker node key virtual task end timestamp.
-   *
    * @param workerNodeKey - The worker node key.
    * @returns The worker node key virtual task end timestamp.
    */
@@ -139,7 +134,7 @@ export class FairShareWorkerChoiceStrategy<
       this.pool.workerNodes[workerNodeKey]?.strategyData
         ?.virtualTaskEndTimestamp
     const now = performance.now()
-    return now < (virtualTaskEndTimestamp ?? -Infinity)
+    return now < (virtualTaskEndTimestamp ?? Number.NEGATIVE_INFINITY)
       ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       virtualTaskEndTimestamp!
       : now