build(deps-dev): apply updates
[poolifier.git] / src / pools / selection-strategies / fair-share-worker-choice-strategy.ts
index 58982f192ee457865e46115203b9509bdc24e29d..88e12b94fa8ef50b50ede22026e95f0242000d45 100644 (file)
@@ -1,4 +1,3 @@
-import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../../utils.js'
 import type { IPool } from '../pool.js'
 import type { IWorker } from '../worker.js'
 import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy.js'
@@ -6,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.
@@ -29,14 +27,18 @@ export class FairShareWorkerChoiceStrategy<
     runTime: {
       aggregate: true,
       average: true,
-      median: false
+      median: false,
+    },
+    waitTime: {
+      aggregate: true,
+      average: true,
+      median: false,
     },
-    waitTime: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
     elu: {
       aggregate: true,
       average: true,
-      median: false
-    }
+      median: false,
+    },
   }
 
   /** @inheritDoc */
@@ -60,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
   }
@@ -83,7 +85,7 @@ export class FairShareWorkerChoiceStrategy<
         if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
           workerNode.strategyData = {
             virtualTaskEndTimestamp:
-              this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+              this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
           }
         }
         return this.isWorkerNodeReady(workerNodeKey) &&
@@ -100,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.
    */
@@ -117,12 +118,13 @@ export class FairShareWorkerChoiceStrategy<
     workerNodeKey: number,
     workerNodeVirtualTaskStartTimestamp: number
   ): number {
-    const workerNodeTaskRunTime =
+    const workerNodeTaskExecutionTime =
+      this.getWorkerNodeTaskWaitTime(workerNodeKey) +
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-      this.opts!.measurement === Measurements.elu
+      (this.opts!.measurement === Measurements.elu
         ? this.getWorkerNodeTaskElu(workerNodeKey)
-        : this.getWorkerNodeTaskRunTime(workerNodeKey)
-    return workerNodeVirtualTaskStartTimestamp + workerNodeTaskRunTime
+        : this.getWorkerNodeTaskRunTime(workerNodeKey))
+    return workerNodeVirtualTaskStartTimestamp + workerNodeTaskExecutionTime
   }
 
   private getWorkerNodeVirtualTaskStartTimestamp (
@@ -132,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