## [Unreleased]
+### Fixed
+
+- Ensure no tasks are queued when trying to soft kill a dynamic worker.
+
## [2.6.2] - 2023-06-12
### Fixed
Default: `60000`
- `killBehavior` (optional) - Dictates if your async unit (worker/process) will be deleted in case that a task is active on it.
- **KillBehaviors.SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker **won't** be deleted.
- **KillBehaviors.HARD**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker will be deleted.
+ **KillBehaviors.SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker **won't** be deleted.
+ **KillBehaviors.HARD**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker will be deleted.
This option only apply to the newly created workers.
Default: `KillBehaviors.SOFT`
const currentWorkerNodeKey = this.getWorkerNodeKey(worker)
if (
isKillBehavior(KillBehaviors.HARD, message.kill) ||
- (message.kill != null &&
+ (this.opts.enableTasksQueue === false &&
+ message.kill != null &&
this.workerNodes[currentWorkerNodeKey].workerUsage.tasks.executing ===
- 0)
+ 0) ||
+ (this.opts.enableTasksQueue === true &&
+ message.kill != null &&
+ 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>)
}
})
*/
export const KillBehaviors = Object.freeze({
/**
- * If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker **wont** be deleted.
+ * If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker **wont** be deleted.
*/
SOFT: 'SOFT',
/**
- * If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker will be deleted.
+ * If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker will be deleted.
*/
HARD: 'HARD'
} as const)
/**
* `killBehavior` dictates if your async unit (worker/process) will be deleted in case that a task is active on it.
*
- * - SOFT: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker **won't** be deleted.
- * - HARD: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker will be deleted.
+ * - SOFT: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker **won't** be deleted.
+ * - HARD: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker will be deleted.
*
* This option only apply to the newly created workers.
*