feat: add destroy event to pool API
authorJérôme Benoit <jerome.benoit@sap.com>
Tue, 15 Aug 2023 16:53:24 +0000 (18:53 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Tue, 15 Aug 2023 16:53:24 +0000 (18:53 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
CHANGELOG.md
src/pools/abstract-pool.ts
src/pools/pool.ts
tests/pools/cluster/dynamic.test.js
tests/pools/cluster/fixed.test.js
tests/pools/thread/dynamic.test.js
tests/pools/thread/fixed.test.js

index de0d866fc361a3a6c946db0b167f13e78a0e05ce..6f63be84e9fe3753b9a83932b8af16d00aae1025 100644 (file)
@@ -7,12 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+### Added
+
+- Add `destroy` event to pool API.
+
 ## [2.6.26] - 2023-08-15
 
 ### Added
 
 - Add kill handler to worker options allowing to execute custom code when worker is killed.
-- Add listTaskFunctions() method to pool API.
+- Add `listTaskFunctions()` method to pool API.
 - SMTP server pool example: nodemailer.
 
 ## [2.6.25] - 2023-08-13
index d36e8a4737dbe5514aa936de561780baee5ba528..8fb25b645fb55f2e0f2e48192aae20a1ec5363c4 100644 (file)
@@ -721,6 +721,7 @@ export abstract class AbstractPool<
         await this.destroyWorkerNode(workerNodeKey)
       })
     )
+    this.emitter?.emit(PoolEvents.destroy)
   }
 
   protected async sendKillMessageToWorker (
index 0bde23befc95521132d619c5d2299008bf9ddd81..24b506ca8f3f1f5a7fef66aeb0440af624cc64dd 100644 (file)
@@ -42,9 +42,10 @@ export class PoolEmitter extends EventEmitter {}
  * Enumeration of pool events.
  */
 export const PoolEvents = Object.freeze({
-  full: 'full',
   ready: 'ready',
   busy: 'busy',
+  full: 'full',
+  destroy: 'destroy',
   error: 'error',
   taskError: 'taskError'
 } as const)
@@ -183,9 +184,10 @@ export interface IPool<
    *
    * Events that can currently be listened to:
    *
-   * - `'full'`: Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
    * - `'ready'`: Emitted when the number of workers created in the pool has reached the minimum size expected and are ready.
    * - `'busy'`: Emitted when the number of workers created in the pool has reached the maximum size expected and are executing at least one task.
+   * - `'full'`: Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
+   * - '`destroy`': Emitted when the pool is destroyed.
    * - `'error'`: Emitted when an uncaught error occurs.
    * - `'taskError'`: Emitted when an error occurs while executing a task.
    */
index 724c0c91348b974cd3b0696c9457640c93978c3e..c91447ee31b6fe1f23c048b9d25568f0bfd8d0db 100644 (file)
@@ -59,9 +59,12 @@ describe('Dynamic cluster pool test suite', () => {
 
   it('Shutdown test', async () => {
     const exitPromise = waitWorkerEvents(pool, 'exit', min)
+    let poolDestroy = 0
+    pool.emitter.on(PoolEvents.destroy, () => ++poolDestroy)
     await pool.destroy()
     const numberOfExitEvents = await exitPromise
     expect(numberOfExitEvents).toBe(min)
+    expect(poolDestroy).toBe(1)
   })
 
   it('Validation of inputs test', () => {
index 30dbc3631b92de7c71b52e386b8a6115e75d83c8..749cacaa4d4ade34727242e21caa1071be504b4c 100644 (file)
@@ -220,9 +220,12 @@ describe('Fixed cluster pool test suite', () => {
 
   it('Shutdown test', async () => {
     const exitPromise = waitWorkerEvents(pool, 'exit', numberOfWorkers)
+    let poolDestroy = 0
+    pool.emitter.on(PoolEvents.destroy, () => ++poolDestroy)
     await pool.destroy()
     const numberOfExitEvents = await exitPromise
     expect(numberOfExitEvents).toBe(numberOfWorkers)
+    expect(poolDestroy).toBe(1)
   })
 
   it('Verify that cluster pool options are checked', async () => {
index 6e6142b715b802493928b8d5d7031ecaf1ebe76f..f85d44ff4c42c6343ac49efa9cb73441c06b9e5f 100644 (file)
@@ -59,9 +59,12 @@ describe('Dynamic thread pool test suite', () => {
 
   it('Shutdown test', async () => {
     const exitPromise = waitWorkerEvents(pool, 'exit', min)
+    let poolDestroy = 0
+    pool.emitter.on(PoolEvents.destroy, () => ++poolDestroy)
     await pool.destroy()
     const numberOfExitEvents = await exitPromise
     expect(numberOfExitEvents).toBe(min)
+    expect(poolDestroy).toBe(1)
   })
 
   it('Validation of inputs test', () => {
index 26546d5e1a1fa1aeb0468b2b85357ea73925bc23..9ccbf67cfb38ab49a36a06bcc3974208925ca0e5 100644 (file)
@@ -250,9 +250,12 @@ describe('Fixed thread pool test suite', () => {
 
   it('Shutdown test', async () => {
     const exitPromise = waitWorkerEvents(pool, 'exit', numberOfThreads)
+    let poolDestroy = 0
+    pool.emitter.on(PoolEvents.destroy, () => ++poolDestroy)
     await pool.destroy()
     const numberOfExitEvents = await exitPromise
     expect(numberOfExitEvents).toBe(numberOfThreads)
+    expect(poolDestroy).toBe(1)
   })
 
   it('Verify that thread pool options are checked', async () => {