fix: ensure worker choice strategies internals are updated after tasks
[poolifier.git] / src / pools / abstract-pool.ts
index 6f5f3aeb1f581ea3306169cdb35d2bf9b71e0c01..8363ecba9f8d3c98d9071023e99f4b7b47053e7a 100644 (file)
@@ -721,12 +721,15 @@ export abstract class AbstractPool<
       if (
         isKillBehavior(KillBehaviors.HARD, message.kill) ||
         (message.kill != null &&
-          this.workerNodes[currentWorkerNodeKey].workerUsage.tasks.executing ===
-            0)
+          ((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)
-        this.flushTasksQueue(currentWorkerNodeKey)
-        // FIXME: wait for tasks to be finished
         void (this.destroyWorker(worker) as Promise<void>)
       }
     })
@@ -763,6 +766,7 @@ export abstract class AbstractPool<
               workerNodeKey,
               this.dequeueTask(workerNodeKey) as Task<Data>
             )
+            this.workerChoiceStrategyContext.update(workerNodeKey)
           }
         }
       }