fix: update worker choice internals without tasks queuing
[poolifier.git] / src / pools / abstract-pool.ts
index 21cfb395785cdc14a82987498b85236b4295c8dd..13bc904a07bf12a02f1958991c53ef54a21889c2 100644 (file)
@@ -720,15 +720,14 @@ export abstract class AbstractPool<
       const currentWorkerNodeKey = this.getWorkerNodeKey(worker)
       if (
         isKillBehavior(KillBehaviors.HARD, message.kill) ||
-        (this.opts.enableTasksQueue === false &&
-          message.kill != null &&
-          this.workerNodes[currentWorkerNodeKey].workerUsage.tasks.executing ===
-            0) ||
-        (this.opts.enableTasksQueue === true &&
-          message.kill != null &&
-          this.workerNodes[currentWorkerNodeKey].workerUsage.tasks.executing ===
-            0 &&
-          this.tasksQueueSize(currentWorkerNodeKey) === 0)
+        (message.kill != null &&
+          ((this.opts.enableTasksQueue === false &&
+            this.workerNodes[currentWorkerNodeKey].workerUsage.tasks
+              .executing === 0) ||
+            (this.opts.enableTasksQueue === true &&
+              this.workerNodes[currentWorkerNodeKey].workerUsage.tasks
+                .executing === 0 &&
+              this.tasksQueueSize(currentWorkerNodeKey) === 0)))
       ) {
         // Kill message received from the worker: no new tasks are submitted to that worker for a while ( > maxInactiveTime)
         void (this.destroyWorker(worker) as Promise<void>)
@@ -768,6 +767,7 @@ export abstract class AbstractPool<
               this.dequeueTask(workerNodeKey) as Task<Data>
             )
           }
+          this.workerChoiceStrategyContext.update(workerNodeKey)
         }
       }
     }