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