fix: fix worker choice strategy retries mechanism on some edge cases
[poolifier.git] / src / pools / selection-strategies / abstract-worker-choice-strategy.ts
index e6269422abb7b2e89d5021fc82ade5a443268b5d..4ed7dcae2b0dea882d1eb15a1cb0f88310435e7f 100644 (file)
@@ -28,11 +28,12 @@ export abstract class AbstractWorkerChoiceStrategy<
   /**
    * The next worker node key.
    */
-  protected nextWorkerNodeKey: number = 0
+  protected nextWorkerNodeKey: number | undefined = 0
 
   /** @inheritDoc */
   public readonly strategyPolicy: StrategyPolicy = {
-    useDynamicWorker: false
+    dynamicWorkerUsage: false,
+    dynamicWorkerReady: false
   }
 
   /** @inheritDoc */
@@ -94,7 +95,7 @@ export abstract class AbstractWorkerChoiceStrategy<
   public abstract update (workerNodeKey: number): boolean
 
   /** @inheritDoc */
-  public abstract choose (): number
+  public abstract choose (): number | undefined
 
   /** @inheritDoc */
   public abstract remove (workerNodeKey: number): boolean
@@ -183,6 +184,21 @@ export abstract class AbstractWorkerChoiceStrategy<
       : this.pool.workerNodes[workerNodeKey].usage.elu.active?.average ?? 0
   }
 
+  /**
+   * Assign to nextWorkerNodeKey property the chosen worker node key.
+   *
+   * @param chosenWorkerNodeKey - The chosen worker node key.
+   */
+  protected assignChosenWorkerNodeKey (
+    chosenWorkerNodeKey: number | undefined
+  ): void {
+    if (chosenWorkerNodeKey != null) {
+      this.nextWorkerNodeKey = chosenWorkerNodeKey
+    } else {
+      this.nextWorkerNodeKey = undefined
+    }
+  }
+
   protected computeDefaultWorkerWeight (): number {
     let cpusCycleTimeWeight = 0
     for (const cpu of cpus()) {