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