fix: fix pool readiness semantic
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 8 Jul 2023 23:10:44 +0000 (01:10 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 8 Jul 2023 23:10:44 +0000 (01:10 +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/abstract/abstract-pool.test.js

index c6eca042a25aa0b3e13fa10dcb5b9d920118fd56..1601bc783ede79120215b9b83989c1378ba5b22f 100644 (file)
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+### Fixed
+
+- Fix pool readiness semantic.
+
 ## [2.6.10] - 2023-07-08
 
 ### Fixed
index 192725082942b1aa7b8904c07eaf8a2731865f45..c699b5282a7c0b862a4cc16b63ee5dd34637a643 100644 (file)
@@ -403,14 +403,16 @@ export abstract class AbstractPool<
 
   private get starting (): boolean {
     return (
-      !this.full ||
-      (this.full && this.workerNodes.some(workerNode => !workerNode.info.ready))
+      this.workerNodes.length < this.minSize ||
+      (this.workerNodes.length >= this.minSize &&
+        this.workerNodes.some(workerNode => !workerNode.info.ready))
     )
   }
 
   private get ready (): boolean {
     return (
-      this.full && this.workerNodes.every(workerNode => workerNode.info.ready)
+      this.workerNodes.length >= this.minSize &&
+      this.workerNodes.every(workerNode => workerNode.info.ready)
     )
   }
 
index 78d298f90f20381d3cb2157d276e32ced109f4a2..881ea62a04d0ffba4fe6d30de4bd30827c1719dd 100644 (file)
@@ -183,7 +183,7 @@ 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 maximum size expected and are ready.
+   * - `'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.
    * - `'error'`: Emitted when an uncaught error occurs.
    * - `'taskError'`: Emitted when an error occurs while executing a task.
index a62caad828a79ab428697eaca2c9b3aa1826fc13..349521d277901ca29c82881d9d8e0bb690cb1847 100644 (file)
@@ -720,7 +720,8 @@ describe('Abstract pool test suite', () => {
   })
 
   it("Verify that pool event emitter 'ready' event can register a callback", async () => {
-    const pool = new FixedClusterPool(
+    const pool = new DynamicClusterPool(
+      Math.floor(numberOfWorkers / 2),
       numberOfWorkers,
       './tests/worker-files/cluster/testWorker.js'
     )
@@ -734,7 +735,7 @@ describe('Abstract pool test suite', () => {
     expect(poolReady).toBe(1)
     expect(poolInfo).toStrictEqual({
       version,
-      type: PoolTypes.fixed,
+      type: PoolTypes.dynamic,
       worker: WorkerTypes.cluster,
       ready: true,
       strategy: WorkerChoiceStrategies.ROUND_ROBIN,