Tests: assess internal strategy statistics resets at changing it
[poolifier.git] / src / pools / selection-strategies / less-recently-used-worker-choice-strategy.ts
index a7892c4036e3b6e9ef742cad0bdc02eb16dbdbf3..0e2a2bf473b64cafa25051fbf13e603e5ab71701 100644 (file)
@@ -1,4 +1,4 @@
-import type { AbstractPoolWorker } from '../abstract-pool-worker'
+import type { IPoolWorker } from '../pool-worker'
 import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy'
 
 /**
@@ -9,23 +9,27 @@ import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy'
  * @template Response Type of response of execution. This can only be serializable data.
  */
 export class LessRecentlyUsedWorkerChoiceStrategy<
-  Worker extends AbstractPoolWorker,
+  Worker extends IPoolWorker,
   Data,
   Response
 > extends AbstractWorkerChoiceStrategy<Worker, Data, Response> {
-  /** @inheritdoc */
+  /** @inheritDoc */
+  public resetStatistics (): boolean {
+    return true
+  }
+
+  /** @inheritDoc */
   public choose (): Worker {
     let minNumberOfRunningTasks = Infinity
     // A worker is always found because it picks the one with fewer tasks
     let lessRecentlyUsedWorker!: Worker
     for (const worker of this.pool.workers) {
-      const workerRunningTasks = this.pool.getWorkerRunningTasks(worker)
-      if (!this.isDynamicPool && workerRunningTasks === 0) {
+      const workerRunningTasks = this.pool.getWorkerRunningTasks(
+        worker
+      ) as number
+      if (this.isDynamicPool === false && workerRunningTasks === 0) {
         return worker
-      } else if (
-        workerRunningTasks !== undefined &&
-        workerRunningTasks < minNumberOfRunningTasks
-      ) {
+      } else if (workerRunningTasks < minNumberOfRunningTasks) {
         lessRecentlyUsedWorker = worker
         minNumberOfRunningTasks = workerRunningTasks
       }