refactor: refactor function arguments
[poolifier.git] / CHANGELOG.md
CommitLineData
522eea03 1# Changelog
2
3All notable changes to this project will be documented in this file.
4
d4abc60a 5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
522eea03 6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
45a5a54c 8## [Unreleased]
9aa78bcb 9
840d1755
JB
10## [4.0.1] - 2024-05-02
11
e0843544
JB
12### Fixed
13
14- Ensure dynamic worker node are initialized with sensible worker node usage default values to avoid worker choice strategies biased decisions.
15- Account for tasks wait time in task execution time computation in worker choice strategies to avoid biased decisions under load with several prioritized task functions and tasks queue enabled.
16
f18b1430
JB
17## [4.0.0] - 2024-04-30
18
f7a08a34
JB
19### Changed
20
3e3e2e5d
JB
21- Support per task function(s) priority and worker choice strategy definition via a task function object: `{ taskFunction: (data?: Data) => Response | Promise<Response>, priority?: number, strategy?: WorkerChoiceStrategy }`.
22- Add priority queue based tasks queueing. One priority queue is divided into prioritized buckets to avoid queued tasks starvation under load.
f7a08a34 23- BREAKING CHANGE: `listTaskFunctionNames()` to `listTaskFunctionsProperties()` in pool and worker API returning registered task functions properties.
3e3e2e5d
JB
24- BREAKING CHANGE: `strategy` field in pool information renamed to `defaultStrategy`.
25
26### Fixed
27
28- Ensure worker choice strategy options changes at runtime are propagated to poolifier workers.
f7a08a34 29
48eab590
JB
30## [3.1.30] - 2024-04-22
31
3e3e2e5d 32### Fixed
22bcc4f1
JB
33
34- Fix `transferList` argument type definition.
35
a2568a26
JB
36## [3.1.29] - 2024-04-02
37
3d720596
JB
38### Fixed
39
40- Fix possible race condition at worker node recreation on worker `error` and `exit` events.
41
d1fc382e
JB
42## [3.1.28] - 2024-04-01
43
60dc0a9c
JB
44### Fixed
45
46- Ensure the minimum number of workers on a started pool is guaranteed.
47
cf4c4b77
JB
48## [3.1.27] - 2024-03-27
49
1fee4f60
JB
50### Fixed
51
52- Fix publishing on JSR, take 4.
53
ac1f550f
JB
54## [3.1.26] - 2024-03-27
55
4ba59505
JB
56### Fixed
57
58- Fix publishing on JSR, take 3.
59
3b58238c
JB
60## [3.1.25] - 2024-03-27
61
41328ae5
JB
62### Fixed
63
64- Fix publishing on JSR, take 2.
65
8fddc9ad
JB
66## [3.1.24] - 2024-03-27
67
fcc6278e
JB
68### Fixed
69
70- Fix publishing on JSR.
71
7586f5a8
JB
72## [3.1.23] - 2024-03-27
73
b7bb8586
JB
74### Changed
75
76- Publish on JSR.
77
01f4a5ce
JB
78## [3.1.22] - 2024-03-15
79
d67bed32
JB
80### Fixed
81
82- Fix pool event emitter registered callbacks removal at `destroy()`.
83
6fd820e6
JB
84## [3.1.21] - 2024-02-22
85
369179f6
JB
86### Fixed
87
88- Fix null exception regression: [#1496](https://github.com/poolifier/poolifier/issues/1496).
89
c96e6364
JB
90## [3.1.20] - 2024-02-11
91
d20cde84
JB
92### Fixed
93
94- Ensure `worker_threads` workers are unreferenced at termination.
95
a7358578
JB
96## [3.1.19] - 2024-01-16
97
16d7e943
JB
98### Fixed
99
100- Fix possible null exception at task finishing handling.
101
57bf289f
JB
102### Changed
103
104- Optimize Deque implementation to improve tasks queueing performance.
105
7cf320c9
JB
106## [3.1.18] - 2024-01-06
107
6d7beb8c
JB
108### Fixed
109
110- Fix dynamic pool with minimum number of workers set to zero: [#1748](https://github.com/poolifier/poolifier/issues/1748).
111
a4bc8d0e
JB
112## [3.1.17] - 2024-01-05
113
2b6b412f
JB
114### Changed
115
116- Improve performance by clean up unneeded condition checks on hot code paths.
117
0d64fd53
JB
118## [3.1.16] - 2024-01-03
119
4302d959
JB
120### Fixed
121
122- Add missing type to TS type definitions.
123
9122cc2c
JB
124## [3.1.15] - 2024-01-02
125
a4d25410
JB
126### Fixed
127
128- Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821).
129
565b7e65
JB
130## [3.1.15-0] - 2024-01-02
131
63406ebd
JB
132### Fixed
133
a4d25410 134- Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821).
63406ebd 135
56412ef4
JB
136## [3.1.14] - 2024-01-01
137
e44639e9
JB
138### Fixed
139
140- Properly handle dynamic pool with zero minimum size.
141
5e133e82
JB
142## [3.1.13] - 2023-12-30
143
b20bf19a
JB
144### Changed
145
146- Reduce branching in several hot code paths.
147- Use faster object cloning implementation.
148
60aa9f2f
JB
149## [3.1.12] - 2023-12-27
150
28883f84
JB
151### Fixed
152
153- Fix tasks redistribution triggers at pool destroying.
154
155### Changed
156
157- Switch TypeScript module resolution to Node16.
158
164c80dd
JB
159## [3.1.12-0] - 2023-12-27
160
f4ef37a8
JB
161### Fixed
162
163- Fix tasks redistribution triggers at pool destroying.
164
0766991a
JB
165## [3.1.11] - 2023-12-24
166
5eb72b9e
JB
167### Fixed
168
169- Avoid worker node cross tasks stealing.
170- Ensure only half the pool worker nodes can steal tasks.
171
4618ccfd
JB
172## [3.1.10] - 2023-12-23
173
09616edb
JB
174### Changed
175
176- Avoid useless branching on pool type.
177
bba20209
JB
178## [3.1.9] - 2023-12-22
179
2889bd70
JB
180### Changed
181
182- Readd ThreadPoolOptions and ClusterPoolOptions TS type aliases to PoolOptions.
183
b1bbc365
JB
184## [3.1.8] - 2023-12-21
185
ad3836ed
JB
186### Fixed
187
188- Fix default worker weight computation.
189- Fix possible null exception at pool destroying.
190
72523ab9
JB
191## [3.1.7] - 2023-12-20
192
55d7d600
JB
193### Fixed
194
195- Ensure worker choice strategies implementation wait for worker node readiness: [#1748](https://github.com/poolifier/poolifier/issues/1748).
196
165f3d56
JB
197## [3.1.6] - 2023-12-18
198
85b2561d
JB
199### Fixed
200
201- Fix pool destroying with tasks queuing enabled.
202
6c8cec9e
JB
203## [3.1.5] - 2023-12-18
204
32b141fd
JB
205### Added
206
207- Add queued tasks end timeout support to worker node termination.
208
f11ec29c
JB
209## [3.1.4] - 2023-12-18
210
4e0afe97
JB
211### Fixed
212
213- Make more robust the fix for possible null exception at handling task execution response.
214
f592ef16
JB
215## [3.1.3] - 2023-12-17
216
9b358e72
JB
217### Fixed
218
219- Fix possible null exception at handling task execution response.
220
c61772e5
JB
221## [3.1.2] - 2023-12-17
222
87347ea8
JB
223### Fixed
224
32b141fd 225- Wait for queued tasks to end at worker node termination.
87347ea8 226
6e664bec
JB
227## [3.1.1] - 2023-12-16
228
51280f9b
JB
229### Fixed
230
231- Fix pool options TS type definition.
232
5362c66b
JB
233## [3.1.0] - 2023-12-16
234
c3719753
JB
235### Changed
236
237- TypeScript breaking change: merge ThreadPoolOptions and ClusterPoolOptions types into PoolOptions type.
238
42321a2b
JB
239## [3.0.14] - 2023-12-13
240
fa548cda
JB
241### Fixed
242
243- Fix possible null exception with worker_threads pools.
244
d727d871
JB
245## [3.0.13] - 2023-12-12
246
fb5a7307
JB
247### Fixed
248
249- Ensure worker choice strategy wait for worker nodes readiness.
250
251### Changed
252
253- Remove infinite retries support in worker choice strategy to avoid configuration leading to possible infinite recursion or loop.
254
90a43710
JB
255## [3.0.12] - 2023-12-12
256
9aa78bcb
JB
257### Changed
258
259- Add infinite retries support in worker choice strategy.
45a5a54c 260
d8163b08
JB
261## [3.0.11] - 2023-12-11
262
f18fd12b
JB
263### Fixed
264
457dd3dc 265- Ensure pool asynchronous resource properly track tasks execution.
f18fd12b 266
bd453998
JB
267## [3.0.10] - 2023-12-08
268
cb71d660
JB
269### Changed
270
457dd3dc 271- Add a fastpath when tasks stealing or redistribution is impossible.
cb71d660 272
d7164344
JB
273## [3.0.9] - 2023-11-26
274
78f60f82
JB
275### Fixed
276
277- Remove all pool events listener at pool destroying.
278- Remove all worker node events listener at worker node destroying.
9f99eb9b 279- Fix worker node event emitter listeners handling memory leak at pool options runtime change.
78f60f82 280
0c08a681
JB
281## [3.0.8] - 2023-11-25
282
463226a4
JB
283### Fixed
284
457dd3dc 285- Ensure continuous tasks stealing on idle start at worker node idling.
463226a4 286
14dad1fd
JB
287## [3.0.7] - 2023-11-24
288
65542a35
JB
289### Changed
290
291- Make continuous tasks stealing start at worker node idling.
292
82c5db63
JB
293## [3.0.6] - 2023-11-24
294
711623b8
JB
295### Fixed
296
b51d8596 297- Ensure pool statuses are checked at initialization, `start()` or `destroy()`.
55082af9 298- Ensure pool `ready` event can be emitted after several `start()/destroy()` cycles.
711623b8 299
5aa31a74
JB
300## [3.0.5] - 2023-10-27
301
d91689fd
JB
302### Fixed
303
55082af9 304- Ensure pool `ready` event can be emitted only once.
d91689fd 305
597775b2
JB
306## [3.0.4] - 2023-10-20
307
03fb313b
JB
308### Changed
309
49d60f11 310- Switch to Bencher for benchmarking: [https://bencher.dev/perf/poolifier](https://bencher.dev/perf/poolifier).
03fb313b
JB
311- Use builtin retry mechanism in worker choice strategies instead of custom one.
312
6c285176
JB
313## [3.0.3] - 2023-10-19
314
9761e404
JB
315### Fixed
316
317- Avoid null exception at sending message to worker.
535fd8d5 318- Avoid null exception at checking worker node readiness.
9761e404 319
358dc40f
JB
320## [3.0.2] - 2023-10-17
321
97256a85
JB
322### Fixed
323
c3c2b35e 324- Fix race condition at dynamic worker node task assignment and scheduled removal. See issue [#1468](https://github.com/poolifier/poolifier/issues/1468) and [#1496](https://github.com/poolifier/poolifier/issues/1496).
97256a85 325
7a570743
JB
326## [3.0.1] - 2023-10-16
327
dbfa7948
JB
328### Fixed
329
fc84edac 330- Workaround possible race condition at work nodes array element removal and querying. See issue [#1468](https://github.com/poolifier/poolifier/issues/1468).
dbfa7948 331
365f13e4
JB
332### Changed
333
c3c2b35e 334- Switch the worker node eventing code to `EventTarget` API.
365f13e4 335
003b3275
JB
336## [3.0.0] - 2023-10-08
337
277c49bf
JB
338### Changed
339
340- Remove Node.js 16.x.x (EOL) support.
341
3c9e911a
JB
342## [2.7.5] - 2023-10-03
343
f80125ca
JB
344### Changed
345
346- Use `EventEmitterAsyncResource` type from `@types/node` for pool event emitter. TypeScript users will need to update to latest `@types/node` version.
347
3466e757
JB
348## [2.7.4] - 2023-09-25
349
67b26ae2
JB
350### Fixed
351
352- Fix source maps (bundler issue).
353
eeb1f961
JB
354## [2.7.3] - 2023-09-24
355
b5604034
JB
356### Changed
357
358- Convert pool event emitter to event emitter async resource.
359
f2df6dc8
JB
360## [2.7.2] - 2023-09-23
361
116ca64b
JB
362### Changed
363
364- Add source maps to npm package to ease debugging.
365
1e319a70
JB
366### Added
367
368- Continuous benchmarking versus other worker pools: [https://poolifier.github.io/benchmark](https://poolifier.github.io/benchmark).
369
aab2819b
JB
370## [2.7.1] - 2023-09-20
371
ae036c3e
JB
372### Fixed
373
374- Ensure worker message listener used one time are removed after usage.
375
15d7c489
JB
376## [2.7.0] - 2023-09-19
377
160557ff
JB
378### Fixed
379
380- Fix task stealing related tasks queue options handling at runtime.
381
c3284191
JB
382### Changed
383
384- Rename `listTaskFunctions()` to `listTaskFunctionNames()` in pool and worker API.
385
386### Added
387
35808931 388- Add `hasTaskFunction()`, `addTaskFunction()`, `removeTaskFunction()`, `setDefaultTaskFunction()` methods to pool API: [PR #1148](https://github.com/poolifier/poolifier/pull/1148).
c20084b6 389- Stricter worker constructor arguments validation.
c3284191 390
04054352
JB
391## [2.6.45] - 2023-09-17
392
093af25b
JB
393### Changed
394
395- Disable publication on GitHub packages registry on release until authentication issue is fixed.
09d9af02
JB
396
397### Added
398
ce0ab2d7 399- Add `startWorkers` to pool options to whether start the minimum number of workers at pool initialization or not.
cde5b54e 400- Add `start()` method to pool API to start the minimum number of workers.
af98b972 401- Add `taskStealing` and `tasksStealingOnPressure` to tasks queue options to whether enable task stealing or not and whether enable tasks stealing under back pressure or not.
1e319a70 402- Continuous internal benchmarking: [https://poolifier.github.io/benchmark-results/dev/bench](https://poolifier.github.io/benchmark-results/dev/bench).
f1c674cd 403
bce9ffdf
JB
404## [2.6.44] - 2023-09-08
405
4cb259d3
JB
406### Fixed
407
408- Use a dedicated PAT to publish on GitHub packages registry.
409
410### Added
411
412- Publish on GitHub packages registry on release.
413
414### Changed
415
416- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
417
fbda1e26
JB
418## [2.6.43] - 2023-09-08
419
15fc82ba
JB
420### Added
421
4cb259d3 422- Publish on GitHub packages registry on release.
15fc82ba
JB
423
424### Changed
425
4cb259d3 426- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
15fc82ba 427
b47306a3
JB
428## [2.6.42] - 2023-09-06
429
ad11ca81
JB
430### Changed
431
432- Optimize hot code paths implementation: avoid unnecessary branching, add and use optimized helpers (min, max), use reduce() array helper, ...
433
1b37751d
JB
434## [2.6.41] - 2023-09-03
435
f3a91bac
JB
436### Changed
437
438- Optimize worker choice strategies implementation.
439
7790a494
JB
440## [2.6.40] - 2023-09-01
441
6fe200b4
JB
442### Fixed
443
444- Do not pre-choose in WRR worker choice strategy to avoid bias.
68738842 445- Avoid array out of bound in worker choice strategies after worker node removal.
6fe200b4 446
766c7f84
JB
447## [2.6.39] - 2023-08-30
448
edf8ce4e
JB
449### Fixed
450
4cb259d3 451- Fix race condition in worker choice strategies at worker node info querying while not yet initialized.
edf8ce4e 452
904a5689
JB
453## [2.6.38] - 2023-08-30
454
b40c4b06
JB
455### Added
456
457- Bundle typescript types declaration into one file.
458
619f403b
JB
459### Changed
460
461- Improve interleaved weighted round robin worker choice strategy implementation.
462
5a24d71c
JB
463## [2.6.37] - 2023-08-28
464
bdb9d712
JB
465### Fixed
466
467- Ensure unused worker usage statistics are deleted at runtime.
468
8c0b113f
JB
469### Changed
470
471- Rename worker choice strategy options `choiceRetries` to `retries`.
574c5c8d 472- Avoid unnecessary branching in worker choice strategies.
8c0b113f 473
ba821940
JB
474## [2.6.36] - 2023-08-27
475
9d2d0da1
JB
476### Fixed
477
478- Fix pool `execute()` arguments check.
479
1f0766e7
JB
480### Changed
481
482- Make continuous tasks stealing algorithm less aggressive.
8780236f 483- Fine tune tasks stealing algorithm under back pressure.
1f0766e7 484
ffd2c1ff
JB
485## [2.6.35] - 2023-08-25
486
dc021bcc
JB
487### Fixed
488
489- Don't account worker usage statistics for tasks that have failed.
3baa0837 490- Fix pool information runtime and wait time median computation.
dc021bcc
JB
491
492### Changed
493
494- Update simple moving average implementation to use a circular buffer.
495- Update simple moving median implementation to use a circular buffer.
68cbdc84
JB
496- Account for stolen tasks in worker usage statistics and pool information.
497
498### Added
499
500- Continuous tasks stealing algorithm.
dc021bcc 501
c58bc2a1
JB
502## [2.6.34] - 2023-08-24
503
0bc68267
JB
504### Fixes
505
506- Avoid cascading tasks stealing under back pressure.
507
508### Changed
509
510- Add fastpath to queued tasks rescheduling.
511
39fb7ad0
JB
512## [2.6.33] - 2023-08-24
513
dd951876
JB
514### Fixed
515
516- Fix queued tasks rescheduling.
517
ff3f866a
JB
518### Changed
519
520- Rename tasks queue options `queueMaxSize` to `size`.
521
a6b3272b 522### Added
dd951876 523
a6b3272b 524- Task stealing scheduling algorithm if tasks queueing is enabled.
dd951876 525
c55c9b5d
JB
526## [2.6.32] - 2023-08-23
527
15b176e0
JB
528### Fixed
529
530- Ensure no task can be executed when the pool is destroyed.
531
20c6f652
JB
532### Added
533
534- Add `queueMaxSize` option to tasks queue options.
574b351d 535- Add O(1) deque implementation implemented with doubly linked list and use it for tasks queueing.
72695f86 536- Add tasks stealing algorithm when a worker node queue is back pressured if tasks queueing is enabled.
20c6f652 537
e560a9f2
JB
538## [2.6.31] - 2023-08-20
539
b1aae695
JB
540### Fixed
541
3e8611a8 542- Fix worker choice strategy retries mechanism in some edge cases.
b1aae695 543
94407def
JB
544### Changed
545
e695d66f 546- Make orthogonal worker choice strategies tasks distribution and created dynamic worker usage.
a71b05bc 547- Remove the experimental status of the `LEAST_ELU` worker choice strategy.
94407def 548
962b9863
JB
549## [2.6.30] - 2023-08-19
550
33e6bb4c
JB
551### Fixed
552
553- Ensure pool event `backPressure` is emitted.
554- Ensure pool event `full` is emitted only once.
8735b4e5 555- Ensure worker node cannot be instantiated without proper arguments.
33e6bb4c 556
8cc4ea81
JB
557## [2.6.29] - 2023-08-18
558
6169563b
JB
559### Fixed
560
55082af9 561- Fix race condition between readiness and task functions worker message handling at startup.
5dd4043c 562- Fix duplicate task function worker usage statistics computation per task function.
db0e38ee 563- Update task function worker usage statistics if and only if there's at least two different task functions.
5bb5be17 564- Fix race condition at task function worker usage executing task computation leading to negative value.
6169563b 565
8990357d
JB
566### Added
567
445264e8 568- Add back pressure detection on the worker node queue. Event `backPressure` is emitted when all worker node queues are full (worker node queue size >= poolMaxSize^2).
8990357d
JB
569- Use back pressure detection in worker choice strategies.
570- Add worker choice strategies retries mechanism if no worker is eligible.
571
21157987
JB
572## [2.6.28] - 2023-08-16
573
f05ed93c
JB
574### Fixed
575
576- Ensure pool workers are properly initialized.
577
12d67776
JB
578### Added
579
580- HTTP server pool examples: express-cluster, express-hybrid.
581
d18fccb1
JB
582### Changed
583
584- Remove now useless branching in worker hot code path.
585
741cdb34
JB
586## [2.6.27] - 2023-08-15
587
50e7f498
JB
588### Fixed
589
590- Add `KillHandler` type definition to exported types.
591
ef3891a3
JB
592### Added
593
594- Add `destroy` event to pool API.
595
e9dc6efa
JB
596## [2.6.26] - 2023-08-15
597
2b099bf7
JB
598### Added
599
600- Add kill handler to worker options allowing to execute custom code when worker is killed.
ef3891a3 601- Add `listTaskFunctions()` method to pool API.
1f4553c6 602- SMTP client pool example: nodemailer.
2b099bf7 603
5b726f72
JB
604## [2.6.25] - 2023-08-13
605
72855e92
JB
606### Added
607
3b311539 608- HTTP server pool examples: fastify-cluster, fastify-hybrid.
02999424 609- WebSocket server pool examples: ws-cluster, ws-hybrid.
72855e92 610
7aadd6e5
JB
611## [2.6.24] - 2023-08-12
612
7d91a8cd
JB
613### Added
614
615- Add array of transferable objects to the `execute()` method arguments.
02999424 616- WebSocket server pool examples: ws-worker_threads.
7d91a8cd 617
6b4263b4
JB
618## [2.6.23] - 2023-08-11
619
3d76750a 620### Fixed
8e0af894 621
3d76750a 622- Fix pool busyness semantic when tasks queueing is enabled: the pool is busy when the number of executing tasks on each worker has reached the maximum tasks concurrency per worker.
9606b474 623
3d76750a
JB
624### Added
625
626- HTTP client pool examples: fetch, node-fetch and axios with multiple task functions.
02999424 627- HTTP server pool examples: express-worker_threads, fastify-worker_threads.
3d76750a
JB
628
629## [2.6.22] - 2023-08-10
9606b474 630
3d76750a 631### Fixed
9606b474
JB
632
633- Add missing `types` field to package.json `exports`.
634
3d76750a
JB
635### Changed
636
637- Structure markdown documentation (PR #811).
638
d9647bdd
JB
639## [2.6.21] - 2023-08-03
640
2111ec12
JB
641### Changed
642
643- Improve code documentation.
644- Code refactoring and cleanup for better maintainability and readability.
645
5c30b9d9
JB
646## [2.6.20] - 2023-07-21
647
10ecf8fd
JB
648### Fixed
649
650- Fix queued tasks redistribution on error task execution starvation.
a1763c54 651- Ensure tasks queueing per worker condition is untangled from the pool busyness semantic.
10ecf8fd 652
aa9eede8
JB
653### Changed
654
7c89e6a4 655- Drastically reduce lookups by worker in the worker nodes.
aa9eede8 656
62485908
JB
657## [2.6.19] - 2023-07-20
658
2e2ef9c3
JB
659### Added
660
661- Dedicated internal communication channel for worker_threads pools.
662
8f4c9491
JB
663## [2.6.18] - 2023-07-19
664
8660b972
JB
665### Changed
666
667- Code refactoring and cleanup for better maintainability and readability. Bundle size is a bit smaller.
668
206a3519
JB
669## [2.6.17] - 2023-07-16
670
b4899fae
JB
671### Added
672
1a3e01ba 673- Add `listTaskFunctions()` method to worker API.
b4899fae 674
58a06a6c
JB
675## [2.6.16] - 2023-07-12
676
2a69b8c5
JB
677### Fixed
678
80520ca4 679- Fix pool startup detection.
2a69b8c5
JB
680- Fix worker task functions handling.
681
b5900b02
JB
682## [2.6.15] - 2023-07-11
683
19dbc45b
JB
684### Added
685
686- Take into account worker node readiness in worker choice strategies.
687
4a0db581
JB
688## [2.6.14] - 2023-07-10
689
87e44747
JB
690### Fixed
691
692- Fix task function statistics tracking.
693
0265272f
JB
694## [2.6.13] - 2023-07-10
695
968a2e8c
JB
696### Added
697
698- Add per task function statistics tracking.
782299f8 699- Add public methods to manipulate the worker task functions at runtime.
968a2e8c 700
44c8c00f
JB
701## [2.6.12] - 2023-07-09
702
aa4bf4b2
JB
703### Fixed
704
705- Workaround import issue with `node:os` module in node 16.x.x.
706
b7cfced1
JB
707## [2.6.11] - 2023-07-09
708
d5024c00
JB
709### Fixed
710
711- Fix pool readiness semantic.
712
f313a208
JB
713## [2.6.10] - 2023-07-08
714
2431bdb4
JB
715### Fixed
716
717- Ensure workers are not recreated on error at pool startup.
718
719### Added
720
721- Add `ready` and `strategy` fields to pool information.
722- Add pool event `ready` to notify when the number of workers created in the pool has reached the maximum size expected and are ready.
caadbd41 723- Add dynamic pool sizing checks.
2431bdb4 724
369d0a51
JB
725## [2.6.9] - 2023-07-07
726
2845f2a5
JB
727### Fixed
728
729- Recreate the right worker type on uncaught exception.
730
731### Added
732
733- Add minimum and maximum to internal measurement statistics.
1dcf8b7b 734- Add `runTime` and `waitTime` to pool information.
75d3401a 735- Check worker inactive time only on dynamic worker.
2845f2a5 736
fc97d613
JB
737## [2.6.8] - 2023-07-03
738
92b1feaa
JB
739### Fixed
740
741- Brown paper bag release to fix version handling in pool information.
742
52d54060
JB
743## [2.6.7] - 2023-07-03
744
5bc91f3e
JB
745### Fixed
746
747- Ensure worker queued tasks at error are reassigned to other pool workers.
748
afe0d5bf
JB
749### Added
750
751- Add pool `utilization` ratio to pool information.
23ccf9d7 752- Add `version` to pool information.
e5b3047d 753- Add worker information to worker nodes.
afe0d5bf 754
f42c583f
JB
755## [2.6.6] - 2023-07-01
756
6961ca9a
JB
757### Added
758
d5e3c4ff 759- Add safe helper `availableParallelism()` to help sizing the pool.
6961ca9a 760
3749facb
JB
761### Fixed
762
763- Ensure message handler is only registered in worker.
764
6fed2513
JB
765## [2.6.5] - 2023-06-27
766
c72f6987
JB
767### Known issues
768
70726c28 769- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
c72f6987
JB
770
771### Fixed
772
773- Artificial version bump to 2.6.5 to workaround publication issue.
d5e3c4ff 774- Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
c72f6987
JB
775- Ensure pool event is emitted before task error promise rejection.
776- Fix queued tasks count computation.
777
778### Removed
779
2fbe1783 780- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
c72f6987 781
6426631b
JB
782## [2.6.4] - 2023-06-27
783
941f9a7c
JB
784### Known issues
785
70726c28 786- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
941f9a7c 787
2c039e43
JB
788### Fixed
789
d5e3c4ff 790- Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
2c039e43 791- Ensure pool event is emitted before task error promise rejection.
9c16fb4b 792- Fix queued tasks count computation.
2c039e43 793
941f9a7c
JB
794### Removed
795
2fbe1783 796- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
941f9a7c 797
bc1b0765
JB
798## [2.6.3] - 2023-06-19
799
a6a2dc4c
JB
800### Fixed
801
802- Ensure no tasks are queued when trying to soft kill a dynamic worker.
f0d7f803 803- Update strategies internals after statistics computation.
a6a2dc4c 804
7b56f532
JB
805### Changed
806
807- Optimize O(1) queue implementation.
808
b628596c
JB
809## [2.6.2] - 2023-06-12
810
a9e89d00
JB
811### Fixed
812
813- Fix new worker use after creation in dynamic pool given the current worker choice strategy.
814
4368a898
JB
815## [2.6.1] - 2023-06-10
816
931d43e2
JB
817### Added
818
13ab5b87 819- Add worker choice strategy documentation: [README.md](./docs/worker-choice-strategies.md).
931d43e2 820
f1c06930
JB
821### Fixed
822
823- Fix average statistics computation: ensure failed tasks are not accounted.
824
16671b07
JB
825## [2.6.0] - 2023-06-09
826
a1347286
JB
827### Added
828
5af9c0f7 829- Add `LEAST_ELU` worker choice strategy (experimental).
9adcefab 830- Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy.
a1347286 831
1c6fe997
JB
832### Changed
833
834- Refactor pool worker node usage internals.
477f48e7 835- Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
f63a9dda 836- Breaking change: pool information `info` property object fields have been renamed.
1c6fe997
JB
837
838### Fixed
839
840- Fix wait time accounting.
841- Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time.
842- Ensure worker choice strategy `LEAST_USED` accounts also queued tasks.
843
aa07d6ee
JB
844## [2.5.4] - 2023-06-07
845
b6b32453
JB
846### Added
847
848- Add Event Loop Utilization (ELU) statistics to worker tasks usage.
849
850### Changed
851
852- Compute statistics at the worker level only if needed.
2fbe1783 853- Add `worker_threads` options to thread pool options.
b6b32453 854
272d4d8f
JB
855### Fixed
856
857- Make the `LEAST_BUSY` strategy only relies on task runtime.
858
ed47fb3d
JB
859## [2.5.3] - 2023-06-04
860
89a4abfd
JB
861### Changed
862
863- Refine pool information content.
b4213b7f 864- Limit pool internals public exposure.
89a4abfd 865
8a9febf5
JB
866## [2.5.2] - 2023-06-02
867
91ee39ed
JB
868### Added
869
870- Add `taskError` pool event for task execution error.
6b27d407 871- Add pool information `info` property to pool.
91ee39ed
JB
872- Emit pool information on `busy` and `full` pool events.
873
8babb151
JB
874## [2.5.1] - 2023-06-01
875
0e05c4dc
JB
876### Added
877
1f68cede 878- Add pool option `restartWorkerOnError` to restart worker on uncaught error. Default to `true`.
91ee39ed 879- Add `error` pool event for uncaught worker error.
0e05c4dc 880
a8766181
JB
881## [2.5.0] - 2023-05-31
882
e4543b14
JB
883### Added
884
885- Switch pool event emitter to `EventEmitterAsyncResource`.
6da80d38 886- Add tasks wait time accounting in per worker tasks usage.
5af9c0f7 887- Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental).
e4543b14
JB
888
889### Changed
890
891- Renamed worker choice strategy `LESS_BUSY` to `LEAST_BUSY` and `LESS_USED` to `LEAST_USED`.
892
570efb11
JB
893## [2.4.14] - 2023-05-09
894
b0f28bad
JB
895### Fixed
896
897- Ensure no undefined task runtime can land in the tasks history.
898- Fix median computation implementation once again.
899
110b6d13
JB
900### Added
901
902- Unit tests for median and queue implementations.
903
72584880
JB
904## [2.4.13] - 2023-05-08
905
b0d6ed8f
JB
906### Fixed
907
e3058615 908- Fix worker choice strategy options validation.
b0d6ed8f
JB
909- Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
910
06140c32
JB
911## [2.4.12] - 2023-05-06
912
a86b6df1
JB
913### Added
914
915- Support multiple task functions per worker.
08f3f44c 916- Add custom worker weights support to worker choice strategies options.
a86b6df1 917
29ee7e9a
JB
918### Changed
919
920- Use O(1) queue implementation for tasks queueing.
921
0682ba15
JB
922### Fixed
923
924- Fix median computation implementation.
925- Fix fair share worker choice strategy internals update.
926
936d53ec
JB
927## [2.4.11] - 2023-04-23
928
cb70b19d
JB
929### Changed
930
931- Optimize free worker finding in worker choice strategies.
932
15bb637a
JB
933## [2.4.10] - 2023-04-15
934
ef41a6e6
JB
935### Fixed
936
82ea6492 937- Fix typescript type definition for task function: ensure the input data is optional.
ef41a6e6
JB
938- Fix typescript type definition for pool execute(): ensure the input data is optional.
939
181eb2b4
JB
940## [2.4.9] - 2023-04-15
941
a20f0ba5
JB
942### Added
943
944- Add tasks queue enablement runtime setter to pool.
945- Add tasks queue options runtime setter to pool.
946- Add worker choice strategy options runtime setter to pool.
947
948### Changed
949
950- Remove the tasks queuing experimental status.
951
d4aeae5a
JB
952### Fixed
953
82ea6492 954- Fix task function type definition and validation.
2fc5cae3 955- Fix worker choice strategy options handling.
d4aeae5a 956
1d9e7023
JB
957## [2.4.8] - 2023-04-12
958
f9b4bbf8
JB
959### Fixed
960
961- Fix message between main worker and worker type definition for tasks.
962- Fix code documentation.
963
12ae3210
JB
964## [2.4.7] - 2023-04-11
965
7171d33f
JB
966### Added
967
968- Add worker tasks queue options to pool options.
969
e8bd29ce
JB
970### Fixed
971
972- Fix missing documentation.
973
42c7bc10
JB
974## [2.4.6] - 2023-04-10
975
681196cc
JB
976### Fixed
977
978- Ensure one task at a time is executed per worker with tasks queueing enabled.
1c6fe997 979- Properly count worker executing tasks with tasks queueing enabled.
681196cc 980
54d360e3
JB
981## [2.4.5] - 2023-04-09
982
3fafb1b2
JB
983### Added
984
9e775f96
JB
985- Use monotonic high resolution timer for worker tasks runtime.
986- Add worker tasks median runtime to statistics.
ff733df7 987- Add worker tasks queue (experimental).
3fafb1b2 988
92fa3eb6
JB
989## [2.4.4] - 2023-04-07
990
aee46736
JB
991### Added
992
993- Add `PoolEvents` enumeration and `PoolEvent` type.
994
36b5e78f
JB
995### Fixed
996
ff0c2b3e 997- Destroy worker only on alive check.
36b5e78f 998
9fb0f324
JB
999## [2.4.3] - 2023-04-07
1000
28cf3617
JB
1001### Fixed
1002
1003- Fix typedoc generation with inheritance.
1004
848f0f27
JB
1005## [2.4.2] - 2023-04-06
1006
164d950a
JB
1007### Added
1008
1009- Add `full` event to dynamic pool.
32417142 1010- Keep worker choice strategy in memory for conditional reuse.
164d950a 1011
78ab2555
JB
1012### Fixed
1013
1014- Fix possible negative worker key at worker removal in worker choice strategies.
1015
79aafe9f
JB
1016## [2.4.1] - 2023-04-05
1017
9cd39dd4
JB
1018### Changed
1019
1020- Optimize worker choice strategy for dynamic pool.
1021
965415bb
JB
1022### Fixed
1023
1024- Ensure dynamic pool does not alter worker choice strategy expected behavior.
1025
d8b60b1c
JB
1026## [2.4.0] - 2023-04-04
1027
c6bd2650
JB
1028### Added
1029
1030- Add `LESS_BUSY` worker choice strategy.
1031
1032### Changed
1033
1034- Optimize worker storage in pool.
1035- Optimize worker alive status check.
1036- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1037- Optimize `LESS_USED` worker choice strategy.
2a87030e 1038- Update benchmark versus external threads pools.
c6bd2650
JB
1039- Optimize tasks usage statistics requirements for worker choice strategy.
1040
1041### Fixed
1042
1043- Ensure trimmable characters are checked at pool initialization.
1044- Fix message id integer overflow.
1045- Fix pool worker removal in worker choice strategy internals.
1046- Fix package publication with pnpm.
1047
d0a3f018
JB
1048## [2.4.0-3] - 2023-04-04
1049
b2ede285
JB
1050### Added
1051
1052- Add `LESS_BUSY` worker choice strategy.
1053
1054### Changed
1055
1056- Optimize worker storage in pool.
1057- Optimize worker alive status check.
1058- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1059- Optimize `LESS_USED` worker choice strategy.
2a87030e 1060- Update benchmark versus external threads pools.
b2ede285
JB
1061
1062### Fixed
1063
1064- Ensure trimmable characters are checked at pool initialization.
1065- Fix message id integer overflow.
1066- Fix pool worker removal in worker choice strategy internals.
1067- Fix package publication with pnpm.
1068
a015ea40
JB
1069## [2.4.0-2] - 2023-04-03
1070
698f4bbc
JB
1071### Added
1072
1073- Add `LESS_BUSY` worker choice strategy.
1074
1075### Changed
1076
1077- Optimize worker storage in pool.
1078- Optimize worker alive status check.
1079- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1080- Optimize `LESS_USED` worker choice strategy.
1081
1082### Fixed
1083
1084- Ensure trimmable characters are checked at pool initialization.
1085- Fix message id integer overflow.
1086- Fix pool worker removal in worker choice strategy internals.
1087- Fix package publication with pnpm.
1088
8fe15920
JB
1089## [2.4.0-1] - 2023-04-03
1090
5b301c28
JB
1091### Added
1092
1093- Add `LESS_BUSY` worker choice strategy.
1094
1095### Changed
1096
1097- Optimize worker storage in pool.
1098- Optimize worker alive status check.
1099- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1100- Optimize `LESS_USED` worker choice strategy.
1101
1102### Fixed
1103
1104- Ensure trimmable characters are checked at pool initialization.
1105- Fix message id integer overflow.
1106- Fix pool worker removal in worker choice strategy internals.
1107
2fb9ca9c
JB
1108## [2.4.0-0] - 2023-04-03
1109
168c526f
JB
1110### Added
1111
1112- Add `LESS_BUSY` worker choice strategy.
1113
1d71a908
JB
1114### Changed
1115
ffcbbad8 1116- Optimize worker storage in pool.
1d71a908 1117- Optimize worker alive status check.
65a60b3b 1118- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
737c6d97 1119- Optimize `LESS_USED` worker choice strategy.
1d71a908 1120
ffcbbad8
JB
1121### Fixed
1122
1123- Ensure trimmable characters are checked at pool initialization.
b4e75778 1124- Fix message id integer overflow.
97a2abc3 1125- Fix pool worker removal in worker choice strategy internals.
ffcbbad8 1126
08372738
JB
1127## [2.3.10] - 2023-03-18
1128
710826bc
JB
1129### Fixed
1130
9606b474 1131- Fix package.json `exports` syntax for ESM and CommonJS.
710826bc
JB
1132
1133### Changed
1134
1135- Permit SemVer pre-release publication.
76e5ac6f 1136
e4796ecd
JB
1137## [2.3.10-2] - 2023-03-18
1138
6abad580
JB
1139### Fixed
1140
9606b474 1141- Fix package.json `exports` syntax for ESM and CommonJS.
6abad580 1142
a2ee98cc
JB
1143## [2.3.10-1] - 2023-03-18
1144
7e060cee
JB
1145### Changed
1146
90483887 1147- Permit SemVer pre-release publication.
7e060cee 1148
c81bfafb
JB
1149## [2.3.10-0] - 2023-03-18
1150
fe18768d
JB
1151### Fixed
1152
9606b474 1153- Fix package.json `exports` syntax for ESM and CommonJS.
fe18768d 1154
d7b78217
JB
1155## [2.3.9] - 2023-03-18
1156
ed6dd37f
JB
1157### Changed
1158
1159- Introduce ESM module support along with CommonJS one.
1160
1161### Fixed
1162
1163- Fix brown paper bag bug referencing the same object literal.
1164
68e2ad86
JB
1165## [2.3.8] - 2023-03-18
1166
ca6c7d70
JB
1167### Changed
1168
1169- Switch internal benchmarking code to benny.
fbdedeb9
JB
1170- Switch to TypeScript 5.x.x.
1171- Switch rollup bundler plugins to core ones.
ed6dd37f 1172- Switch to TSDoc syntax.
fbdedeb9 1173- Enforce conventional commits.
ca6c7d70 1174
d15211d4
JB
1175### Fixed
1176
1177- Fix random integer generator.
fbdedeb9 1178- Fix worker choice strategy pool type identification at initialization.
d15211d4 1179
995705ea
JB
1180## [2.3.7] - 2022-10-23
1181
b953022b
JB
1182### Changed
1183
1184- Switch to open collective FOSS project funding platform.
78cea37e
JB
1185- Switch to ts-standard linter configuration on TypeScript code.
1186
1187### Fixed
1188
1189- Fixed missing async on pool execute method.
1190- Fixed typing in TypeScript example.
1191- Fixed types in unit tests.
b953022b 1192
3b9f6953
JB
1193## [2.3.6] - 2022-10-22
1194
f80cead4
JB
1195### Changed
1196
1197- Cleanup pool attributes and methods.
1198- Refine error types thrown.
1199
1200### Fixed
1201
1202- Fix continuous integration build on windows.
1203- Fix code coverage reporting by using c8 instead of nyc.
1204
efc22107
JB
1205## [2.3.5] - 2022-10-21
1206
7a6a0a96
JB
1207### Changed
1208
a05c10de
JB
1209- Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
1210- Optimize tasks usage lookup implementation.
7a6a0a96 1211
b4904890
JB
1212### Fixed
1213
1214- Fix missed pool event emitter type export.
1215- Fix typedoc documentation generation.
1216
a875f8d1
JB
1217## [2.3.4] - 2022-10-17
1218
73cda448
JB
1219### Added
1220
1221- Fully automate release process with release-it.
1222
45a5a54c
JB
1223### Changed
1224
73cda448 1225- Optimize fair share task scheduling algorithm implementation.
2a87030e 1226- Update benchmark versus external pools results with latest version.
45a5a54c 1227
90ee1b18 1228## [2.3.3] - 2022-10-15
1a76932b
JB
1229
1230### Added
1231
1232- Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
1233
90ee1b18 1234## [2.3.2] - 2022-10-14
11df3590
JB
1235
1236### Changed
1237
1238- Optimize fair share worker selection strategy implementation.
1239
1240### Fixed
1241
1242- Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
1243
90ee1b18 1244## [2.3.1] - 2022-10-13
23ff945a
JB
1245
1246### Added
1247
1248- Pool worker choice strategies:
1249 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
1250 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
1251
90ee1b18 1252## [2.2.2] - 2022-10-09
cb2b6c69
JB
1253
1254### Fixed
1255
1256- Fixed `README.md` file.
1257
90ee1b18 1258## [2.2.1] - 2022-10-08
bdacc2d2 1259
bdaf31cd
JB
1260### Added
1261
1262- Dynamic worker choice strategy change at runtime.
bdacc2d2 1263
90ee1b18 1264## [2.2.0] - 2022-01-05
7e0d447f
JB
1265
1266### Breaking Changes
1267
9606b474 1268- Support only Node.js version 16.x.x for cluster pool: upstream cluster API have changed on that version.
7e0d447f 1269
90ee1b18 1270## [2.1.0] - 2021-08-29
35cf1c03
JB
1271
1272### Added
1273
1274- Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
e088a00c
JB
1275
1276### Breaking Changes
1277
1278- `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
1279- `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
1280- `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
c365b2d3 1281- `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
e088a00c 1282
90ee1b18 1283## [2.0.2] - 2021-05-12
14916bf9
JB
1284
1285### Bug fixes
1286
1287- Fix `busy` event emission on fixed pool type
1288
90ee1b18 1289## [2.0.1] - 2021-03-16
7f685093
JB
1290
1291### Bug fixes
1292
1293- Check if pool options are properly set.
1294- `busy` event is emitted on all pool types.
1295
90ee1b18 1296## [2.0.0] - 2021-03-01
fa0f5b28 1297
f3f833ab 1298### Bug fixes
d63d3be3 1299
ddbeaffd 1300- Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
d63d3be3 1301
fa0f5b28
S
1302### Breaking Changes
1303
7f685093 1304- `FullPool` event is now renamed to `busy`.
1927ee67 1305- `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
1a81f8af 1306 _Find more details on our JSDoc._
ddbeaffd 1307
1927ee67
APA
1308- `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
1309
ddbeaffd 1310- We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
fa0f5b28 1311
ec2ccfc8
JB
1312### Pool options types declaration merge
1313
1314`FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
1315
fa0f5b28
S
1316#### New `export` strategy
1317
1318```js
1319// Before
0eee77cb 1320const DynamicThreadPool = require('poolifier/lib/dynamic')
fa0f5b28 1321// After
0eee77cb 1322const { DynamicThreadPool } = require('poolifier/lib/dynamic')
fa0f5b28
S
1323```
1324
1325But you should always prefer just using
1326
1327```js
0eee77cb 1328const { DynamicThreadPool } = require('poolifier')
fa0f5b28
S
1329```
1330
d3c8a1a8
S
1331#### New type definitions for input data and response
1332
6677a3d3 1333For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
9606b474 1334_This is not a limitation by poolifier but Node.js._
d3c8a1a8 1335
3a4b605f 1336#### Public property replacements
5c5a1fb7 1337
3a4b605f 1338`numWorkers` property is now `numberOfWorkers`
5c5a1fb7 1339
280c2a77 1340#### Internal (protected) properties and methods renaming
fa0f5b28 1341
280c2a77
S
1342These properties are not intended for end users
1343
1344- `id` => `nextMessageId`
1345
1346These methods are not intended for end users
fa0f5b28
S
1347
1348- `_chooseWorker` => `chooseWorker`
280c2a77 1349- `_newWorker` => `createWorker`
fa0f5b28
S
1350- `_execute` => `internalExecute`
1351- `_chooseWorker` => `chooseWorker`
1352- `_checkAlive` => `checkAlive`
1353- `_run` => `run`
1354- `_runAsync` => `runAsync`
1355
90ee1b18 1356## [1.1.0] - 2020-05-21
0312f71a
APA
1357
1358### Added
1359
1360- ThreadWorker support async functions as option
cf9aa6c3 1361- Various external library patches
0312f71a 1362
90ee1b18 1363## [1.0.0] - 2020-01-24
522eea03 1364
1365### Added
1366
1367- FixedThreadPool implementation
1368- DynamicThreadPool implementation
0312f71a 1369- WorkerThread implementation to improve developer experience