fix: set pool start timestamp at start()
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 30 Apr 2024 18:39:25 +0000 (20:39 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 30 Apr 2024 18:39:25 +0000 (20:39 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
README.md
src/pools/abstract-pool.ts

index ec5db15613edf1c4014670b819b14ea050670cab..473386a6cac552e4059aacc057ff648293fbe3a0 100644 (file)
--- a/README.md
+++ b/README.md
@@ -40,15 +40,15 @@ Please consult our [general guidelines](#general-guidelines).
 - Proper integration with Node.js [async_hooks](https://nodejs.org/api/async_hooks.html) :white_check_mark:
 - Support for CommonJS, ESM and TypeScript :white_check_mark:
 - Support for [worker_threads](https://nodejs.org/api/worker_threads.html) and [cluster](https://nodejs.org/api/cluster.html) Node.js modules :white_check_mark:
-- Support for multiple task functions with per task function queuing priority and tasks distribution strategy :white_check_mark:
-- Support for task functions [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations at runtime :white_check_mark:
-- Support for sync and async task functions :white_check_mark:
 - Tasks distribution strategies :white_check_mark:
 - Lockless tasks queueing :white_check_mark:
 - Queued tasks rescheduling:
   - Task stealing on idle :white_check_mark:
   - Tasks stealing under back pressure :white_check_mark:
   - Tasks redistribution on worker error :white_check_mark:
+- Support for sync and async task functions :white_check_mark:
+- Support for multiple task functions with per task function queuing priority and tasks distribution strategy :white_check_mark:
+- Support for task functions [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations at runtime :white_check_mark:
 - General guidelines on pool choice :white_check_mark:
 - Error handling out of the box :white_check_mark:
 - Widely tested :white_check_mark:
index ba632bb14210eaed19701ba79abe867a08396724..e18f149997cf1d3f29f2589626f1024f697320c5 100644 (file)
@@ -137,7 +137,7 @@ export abstract class AbstractPool<
   /**
    * The start timestamp of the pool.
    */
-  private readonly startTimestamp
+  private startTimestamp?: number
 
   /**
    * Constructs a new poolifier pool.
@@ -193,8 +193,6 @@ export abstract class AbstractPool<
     if (this.opts.startWorkers === true) {
       this.start()
     }
-
-    this.startTimestamp = performance.now()
   }
 
   private checkPoolType (): void {
@@ -487,6 +485,9 @@ export abstract class AbstractPool<
    * @returns The pool utilization.
    */
   private get utilization (): number {
+    if (this.startTimestamp == null) {
+      return 0
+    }
     const poolTimeCapacity =
       (performance.now() - this.startTimestamp) *
       (this.maximumNumberOfWorkers ?? this.minimumNumberOfWorkers)
@@ -1089,6 +1090,7 @@ export abstract class AbstractPool<
     this.startMinimumNumberOfWorkers()
     this.starting = false
     this.started = true
+    this.startTimestamp = performance.now()
   }
 
   /** @inheritDoc */
@@ -1113,6 +1115,7 @@ export abstract class AbstractPool<
     this.readyEventEmitted = false
     this.destroying = false
     this.started = false
+    delete this.startTimestamp
   }
 
   private async sendKillMessageToWorker (workerNodeKey: number): Promise<void> {