chore: v2.6.10
[poolifier.git] / CHANGELOG.md
1 # Changelog
2
3 All notable changes to this project will be documented in this file.
4
5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8 ## [Unreleased]
9
10 ## [2.6.10] - 2023-07-08
11
12 ### Fixed
13
14 - Ensure workers are not recreated on error at pool startup.
15
16 ### Added
17
18 - Add `ready` and `strategy` fields to pool information.
19 - Add pool event `ready` to notify when the number of workers created in the pool has reached the maximum size expected and are ready.
20 - Add dynamic pool sizing checks.
21
22 ## [2.6.9] - 2023-07-07
23
24 ### Fixed
25
26 - Recreate the right worker type on uncaught exception.
27
28 ### Added
29
30 - Add minimum and maximum to internal measurement statistics.
31 - Add `runTime` and `waitTime` to pool information.
32 - Check worker inactive time only on dynamic worker.
33
34 ## [2.6.8] - 2023-07-03
35
36 ### Fixed
37
38 - Brown paper bag release to fix version handling in pool information.
39
40 ## [2.6.7] - 2023-07-03
41
42 ### Fixed
43
44 - Ensure worker queued tasks at error are reassigned to other pool workers.
45
46 ### Added
47
48 - Add pool `utilization` ratio to pool information.
49 - Add `version` to pool information.
50 - Add worker information to worker nodes.
51
52 ## [2.6.6] - 2023-07-01
53
54 ### Added
55
56 - Add safe helper `availableParallelism` to help sizing the pool.
57
58 ### Fixed
59
60 - Ensure message handler is only registered in worker.
61
62 ## [2.6.5] - 2023-06-27
63
64 ### Known issues
65
66 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
67
68 ### Fixed
69
70 - Artificial version bump to 2.6.5 to workaround publication issue.
71 - Ensure cluster pool destroy() gracefully shutdowns worker's server.
72 - Ensure pool event is emitted before task error promise rejection.
73 - Fix queued tasks count computation.
74
75 ### Removed
76
77 - Remove unneeded worker-threads worker `MessageChannel` internal usage for IPC.
78
79 ## [2.6.4] - 2023-06-27
80
81 ### Known issues
82
83 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
84
85 ### Fixed
86
87 - Ensure cluster pool destroy() gracefully shutdowns worker's server.
88 - Ensure pool event is emitted before task error promise rejection.
89 - Fix queued tasks count computation.
90
91 ### Removed
92
93 - Remove unneeded worker-threads worker `MessageChannel` internal usage for IPC.
94
95 ## [2.6.3] - 2023-06-19
96
97 ### Fixed
98
99 - Ensure no tasks are queued when trying to soft kill a dynamic worker.
100 - Update strategies internals after statistics computation.
101
102 ### Changed
103
104 - Optimize O(1) queue implementation.
105
106 ## [2.6.2] - 2023-06-12
107
108 ### Fixed
109
110 - Fix new worker use after creation in dynamic pool given the current worker choice strategy.
111
112 ## [2.6.1] - 2023-06-10
113
114 ### Added
115
116 - Add worker choice strategy documentation: [README.md](./src/pools/selection-strategies/README.md).
117
118 ### Fixed
119
120 - Fix average statistics computation: ensure failed tasks are not accounted.
121
122 ## [2.6.0] - 2023-06-09
123
124 ### Added
125
126 - Add `LEAST_ELU` worker choice strategy (experimental).
127 - Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy.
128
129 ### Changed
130
131 - Refactor pool worker node usage internals.
132 - Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
133 - Breaking change: pool information `info` property object fields have been renamed.
134
135 ### Fixed
136
137 - Fix wait time accounting.
138 - Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time.
139 - Ensure worker choice strategy `LEAST_USED` accounts also queued tasks.
140
141 ## [2.5.4] - 2023-06-07
142
143 ### Added
144
145 - Add Event Loop Utilization (ELU) statistics to worker tasks usage.
146
147 ### Changed
148
149 - Compute statistics at the worker level only if needed.
150 - Add `worker-threads` options to thread pool options.
151
152 ### Fixed
153
154 - Make the `LEAST_BUSY` strategy only relies on task runtime.
155
156 ## [2.5.3] - 2023-06-04
157
158 ### Changed
159
160 - Refine pool information content.
161 - Limit pool internals public exposure.
162
163 ## [2.5.2] - 2023-06-02
164
165 ### Added
166
167 - Add `taskError` pool event for task execution error.
168 - Add pool information `info` property to pool.
169 - Emit pool information on `busy` and `full` pool events.
170
171 ## [2.5.1] - 2023-06-01
172
173 ### Added
174
175 - Add pool option `restartWorkerOnError` to restart worker on uncaught error. Default to `true`.
176 - Add `error` pool event for uncaught worker error.
177
178 ## [2.5.0] - 2023-05-31
179
180 ### Added
181
182 - Switch pool event emitter to `EventEmitterAsyncResource`.
183 - Add tasks wait time accounting in per worker tasks usage.
184 - Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental).
185
186 ### Changed
187
188 - Renamed worker choice strategy `LESS_BUSY` to `LEAST_BUSY` and `LESS_USED` to `LEAST_USED`.
189
190 ## [2.4.14] - 2023-05-09
191
192 ### Fixed
193
194 - Ensure no undefined task runtime can land in the tasks history.
195 - Fix median computation implementation once again.
196
197 ### Added
198
199 - Unit tests for median and queue implementations.
200
201 ## [2.4.13] - 2023-05-08
202
203 ### Fixed
204
205 - Fix worker choice strategy options validation.
206 - Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
207
208 ## [2.4.12] - 2023-05-06
209
210 ### Added
211
212 - Support multiple task functions per worker.
213 - Add custom worker weights support to worker choice strategies options.
214
215 ### Changed
216
217 - Use O(1) queue implementation for tasks queueing.
218
219 ### Fixed
220
221 - Fix median computation implementation.
222 - Fix fair share worker choice strategy internals update.
223
224 ## [2.4.11] - 2023-04-23
225
226 ### Changed
227
228 - Optimize free worker finding in worker choice strategies.
229
230 ## [2.4.10] - 2023-04-15
231
232 ### Fixed
233
234 - Fix typescript type definition for worker function: ensure the input data is optional.
235 - Fix typescript type definition for pool execute(): ensure the input data is optional.
236
237 ## [2.4.9] - 2023-04-15
238
239 ### Added
240
241 - Add tasks queue enablement runtime setter to pool.
242 - Add tasks queue options runtime setter to pool.
243 - Add worker choice strategy options runtime setter to pool.
244
245 ### Changed
246
247 - Remove the tasks queuing experimental status.
248
249 ### Fixed
250
251 - Fix worker function type definition and validation.
252 - Fix worker choice strategy options handling.
253
254 ## [2.4.8] - 2023-04-12
255
256 ### Fixed
257
258 - Fix message between main worker and worker type definition for tasks.
259 - Fix code documentation.
260
261 ## [2.4.7] - 2023-04-11
262
263 ### Added
264
265 - Add worker tasks queue options to pool options.
266
267 ### Fixed
268
269 - Fix missing documentation.
270
271 ## [2.4.6] - 2023-04-10
272
273 ### Fixed
274
275 - Ensure one task at a time is executed per worker with tasks queueing enabled.
276 - Properly count worker executing tasks with tasks queueing enabled.
277
278 ## [2.4.5] - 2023-04-09
279
280 ### Added
281
282 - Use monotonic high resolution timer for worker tasks runtime.
283 - Add worker tasks median runtime to statistics.
284 - Add worker tasks queue (experimental).
285
286 ## [2.4.4] - 2023-04-07
287
288 ### Added
289
290 - Add `PoolEvents` enumeration and `PoolEvent` type.
291
292 ### Fixed
293
294 - Destroy worker only on alive check.
295
296 ## [2.4.3] - 2023-04-07
297
298 ### Fixed
299
300 - Fix typedoc generation with inheritance.
301
302 ## [2.4.2] - 2023-04-06
303
304 ### Added
305
306 - Add `full` event to dynamic pool.
307 - Keep worker choice strategy in memory for conditional reuse.
308
309 ### Fixed
310
311 - Fix possible negative worker key at worker removal in worker choice strategies.
312
313 ## [2.4.1] - 2023-04-05
314
315 ### Changed
316
317 - Optimize worker choice strategy for dynamic pool.
318
319 ### Fixed
320
321 - Ensure dynamic pool does not alter worker choice strategy expected behavior.
322
323 ## [2.4.0] - 2023-04-04
324
325 ### Added
326
327 - Add `LESS_BUSY` worker choice strategy.
328
329 ### Changed
330
331 - Optimize worker storage in pool.
332 - Optimize worker alive status check.
333 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
334 - Optimize `LESS_USED` worker choice strategy.
335 - Update benchmarks versus external threads pools.
336 - Optimize tasks usage statistics requirements for worker choice strategy.
337
338 ### Fixed
339
340 - Ensure trimmable characters are checked at pool initialization.
341 - Fix message id integer overflow.
342 - Fix pool worker removal in worker choice strategy internals.
343 - Fix package publication with pnpm.
344
345 ## [2.4.0-3] - 2023-04-04
346
347 ### Added
348
349 - Add `LESS_BUSY` worker choice strategy.
350
351 ### Changed
352
353 - Optimize worker storage in pool.
354 - Optimize worker alive status check.
355 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
356 - Optimize `LESS_USED` worker choice strategy.
357 - Update benchmarks versus external threads pools.
358
359 ### Fixed
360
361 - Ensure trimmable characters are checked at pool initialization.
362 - Fix message id integer overflow.
363 - Fix pool worker removal in worker choice strategy internals.
364 - Fix package publication with pnpm.
365
366 ## [2.4.0-2] - 2023-04-03
367
368 ### Added
369
370 - Add `LESS_BUSY` worker choice strategy.
371
372 ### Changed
373
374 - Optimize worker storage in pool.
375 - Optimize worker alive status check.
376 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
377 - Optimize `LESS_USED` worker choice strategy.
378
379 ### Fixed
380
381 - Ensure trimmable characters are checked at pool initialization.
382 - Fix message id integer overflow.
383 - Fix pool worker removal in worker choice strategy internals.
384 - Fix package publication with pnpm.
385
386 ## [2.4.0-1] - 2023-04-03
387
388 ### Added
389
390 - Add `LESS_BUSY` worker choice strategy.
391
392 ### Changed
393
394 - Optimize worker storage in pool.
395 - Optimize worker alive status check.
396 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
397 - Optimize `LESS_USED` worker choice strategy.
398
399 ### Fixed
400
401 - Ensure trimmable characters are checked at pool initialization.
402 - Fix message id integer overflow.
403 - Fix pool worker removal in worker choice strategy internals.
404
405 ## [2.4.0-0] - 2023-04-03
406
407 ### Added
408
409 - Add `LESS_BUSY` worker choice strategy.
410
411 ### Changed
412
413 - Optimize worker storage in pool.
414 - Optimize worker alive status check.
415 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
416 - Optimize `LESS_USED` worker choice strategy.
417
418 ### Fixed
419
420 - Ensure trimmable characters are checked at pool initialization.
421 - Fix message id integer overflow.
422 - Fix pool worker removal in worker choice strategy internals.
423
424 ## [2.3.10] - 2023-03-18
425
426 ### Fixed
427
428 - Fix `exports` syntax for ESM and CommonJS.
429
430 ### Changed
431
432 - Permit SemVer pre-release publication.
433
434 ## [2.3.10-2] - 2023-03-18
435
436 ### Fixed
437
438 - Fix `exports` syntax for ESM and CommonJS.
439
440 ## [2.3.10-1] - 2023-03-18
441
442 ### Changed
443
444 - Permit SemVer pre-release publication.
445
446 ## [2.3.10-0] - 2023-03-18
447
448 ### Fixed
449
450 - Fix `exports` syntax for ESM and CommonJS.
451
452 ## [2.3.9] - 2023-03-18
453
454 ### Changed
455
456 - Introduce ESM module support along with CommonJS one.
457
458 ### Fixed
459
460 - Fix brown paper bag bug referencing the same object literal.
461
462 ## [2.3.8] - 2023-03-18
463
464 ### Changed
465
466 - Switch internal benchmarking code to benny.
467 - Switch to TypeScript 5.x.x.
468 - Switch rollup bundler plugins to core ones.
469 - Switch to TSDoc syntax.
470 - Enforce conventional commits.
471
472 ### Fixed
473
474 - Fix random integer generator.
475 - Fix worker choice strategy pool type identification at initialization.
476
477 ## [2.3.7] - 2022-10-23
478
479 ### Changed
480
481 - Switch to open collective FOSS project funding platform.
482 - Switch to ts-standard linter configuration on TypeScript code.
483
484 ### Fixed
485
486 - Fixed missing async on pool execute method.
487 - Fixed typing in TypeScript example.
488 - Fixed types in unit tests.
489
490 ## [2.3.6] - 2022-10-22
491
492 ### Changed
493
494 - Cleanup pool attributes and methods.
495 - Refine error types thrown.
496
497 ### Fixed
498
499 - Fix continuous integration build on windows.
500 - Fix code coverage reporting by using c8 instead of nyc.
501
502 ## [2.3.5] - 2022-10-21
503
504 ### Changed
505
506 - Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
507 - Optimize tasks usage lookup implementation.
508
509 ### Fixed
510
511 - Fix missed pool event emitter type export.
512 - Fix typedoc documentation generation.
513
514 ## [2.3.4] - 2022-10-17
515
516 ### Added
517
518 - Fully automate release process with release-it.
519
520 ### Changed
521
522 - Optimize fair share task scheduling algorithm implementation.
523 - Update benchmarks versus external pools results with latest version.
524
525 ## [2.3.3] - 2022-10-15
526
527 ### Added
528
529 - Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
530
531 ## [2.3.2] - 2022-10-14
532
533 ### Changed
534
535 - Optimize fair share worker selection strategy implementation.
536
537 ### Fixed
538
539 - Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
540
541 ## [2.3.1] - 2022-10-13
542
543 ### Added
544
545 - Pool worker choice strategies:
546 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
547 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
548
549 ## [2.2.2] - 2022-10-09
550
551 ### Fixed
552
553 - Fixed `README.md` file.
554
555 ## [2.2.1] - 2022-10-08
556
557 ### Added
558
559 - Dynamic worker choice strategy change at runtime.
560
561 ## [2.2.0] - 2022-01-05
562
563 ### Breaking Changes
564
565 - Support only NodeJS version 16.x.x for cluster pool: upstream cluster API have changed on that version.
566
567 ## [2.1.0] - 2021-08-29
568
569 ### Added
570
571 - Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
572
573 ### Breaking Changes
574
575 - `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
576 - `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
577 - `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
578 - `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
579
580 ## [2.0.2] - 2021-05-12
581
582 ### Bug fixes
583
584 - Fix `busy` event emission on fixed pool type
585
586 ## [2.0.1] - 2021-03-16
587
588 ### Bug fixes
589
590 - Check if pool options are properly set.
591 - `busy` event is emitted on all pool types.
592
593 ## [2.0.0] - 2021-03-01
594
595 ### Bug fixes
596
597 - Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
598
599 ### Breaking Changes
600
601 - `FullPool` event is now renamed to `busy`.
602 - `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
603 _Find more details on our JSDoc._
604
605 - `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
606
607 - We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
608
609 ### Pool options types declaration merge
610
611 `FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
612
613 #### New `export` strategy
614
615 ```js
616 // Before
617 const DynamicThreadPool = require('poolifier/lib/dynamic')
618 // After
619 const { DynamicThreadPool } = require('poolifier/lib/dynamic')
620 ```
621
622 But you should always prefer just using
623
624 ```js
625 const { DynamicThreadPool } = require('poolifier')
626 ```
627
628 #### New type definitions for input data and response
629
630 For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
631 _This is not a limitation by poolifier but NodeJS._
632
633 #### Public property replacements
634
635 `numWorkers` property is now `numberOfWorkers`
636
637 #### Internal (protected) properties and methods renaming
638
639 These properties are not intended for end users
640
641 - `id` => `nextMessageId`
642
643 These methods are not intended for end users
644
645 - `_chooseWorker` => `chooseWorker`
646 - `_newWorker` => `createWorker`
647 - `_execute` => `internalExecute`
648 - `_chooseWorker` => `chooseWorker`
649 - `_checkAlive` => `checkAlive`
650 - `_run` => `run`
651 - `_runAsync` => `runAsync`
652
653 ## [1.1.0] - 2020-05-21
654
655 ### Added
656
657 - ThreadWorker support async functions as option
658 - Various external library patches
659
660 ## [1.0.0] - 2020-01-24
661
662 ### Added
663
664 - FixedThreadPool implementation
665 - DynamicThreadPool implementation
666 - WorkerThread implementation to improve developer experience