X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=CHANGELOG.md;h=2885241e38ccc0afa54b9ffd7a91a2ac60a2a4db;hb=bc316fd447654e93fcf541bac6ee85e612fe0205;hp=2fcf3b222d91f50c7280d99fd09ed69445b7b7e0;hpb=233339f4de21ce5e584d37e18121d676cd3af0bd;p=poolifier.git diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fcf3b22..2885241e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,518 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.1.29] - 2024-04-02 + +### Fixed + +- Fix possible race condition at worker node recreation on worker `error` and `exit` events. + +## [3.1.28] - 2024-04-01 + +### Fixed + +- Ensure the minimum number of workers on a started pool is guaranteed. + +## [3.1.27] - 2024-03-27 + +### Fixed + +- Fix publishing on JSR, take 4. + +## [3.1.26] - 2024-03-27 + +### Fixed + +- Fix publishing on JSR, take 3. + +## [3.1.25] - 2024-03-27 + +### Fixed + +- Fix publishing on JSR, take 2. + +## [3.1.24] - 2024-03-27 + +### Fixed + +- Fix publishing on JSR. + +## [3.1.23] - 2024-03-27 + +### Changed + +- Publish on JSR. + +## [3.1.22] - 2024-03-15 + +### Fixed + +- Fix pool event emitter registered callbacks removal at `destroy()`. + +## [3.1.21] - 2024-02-22 + +### Fixed + +- Fix null exception regression: [#1496](https://github.com/poolifier/poolifier/issues/1496). + +## [3.1.20] - 2024-02-11 + +### Fixed + +- Ensure `worker_threads` workers are unreferenced at termination. + +## [3.1.19] - 2024-01-16 + +### Fixed + +- Fix possible null exception at task finishing handling. + +### Changed + +- Optimize Deque implementation to improve tasks queueing performance. + +## [3.1.18] - 2024-01-06 + +### Fixed + +- Fix dynamic pool with minimum number of workers set to zero: [#1748](https://github.com/poolifier/poolifier/issues/1748). + +## [3.1.17] - 2024-01-05 + +### Changed + +- Improve performance by clean up unneeded condition checks on hot code paths. + +## [3.1.16] - 2024-01-03 + +### Fixed + +- Add missing type to TS type definitions. + +## [3.1.15] - 2024-01-02 + +### Fixed + +- Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821). + +## [3.1.15-0] - 2024-01-02 + +### Fixed + +- Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821). + +## [3.1.14] - 2024-01-01 + +### Fixed + +- Properly handle dynamic pool with zero minimum size. + +## [3.1.13] - 2023-12-30 + +### Changed + +- Reduce branching in several hot code paths. +- Use faster object cloning implementation. + +## [3.1.12] - 2023-12-27 + +### Fixed + +- Fix tasks redistribution triggers at pool destroying. + +### Changed + +- Switch TypeScript module resolution to Node16. + +## [3.1.12-0] - 2023-12-27 + +### Fixed + +- Fix tasks redistribution triggers at pool destroying. + +## [3.1.11] - 2023-12-24 + +### Fixed + +- Avoid worker node cross tasks stealing. +- Ensure only half the pool worker nodes can steal tasks. + +## [3.1.10] - 2023-12-23 + +### Changed + +- Avoid useless branching on pool type. + +## [3.1.9] - 2023-12-22 + +### Changed + +- Readd ThreadPoolOptions and ClusterPoolOptions TS type aliases to PoolOptions. + +## [3.1.8] - 2023-12-21 + +### Fixed + +- Fix default worker weight computation. +- Fix possible null exception at pool destroying. + +## [3.1.7] - 2023-12-20 + +### Fixed + +- Ensure worker choice strategies implementation wait for worker node readiness: [#1748](https://github.com/poolifier/poolifier/issues/1748). + +## [3.1.6] - 2023-12-18 + +### Fixed + +- Fix pool destroying with tasks queuing enabled. + +## [3.1.5] - 2023-12-18 + +### Added + +- Add queued tasks end timeout support to worker node termination. + +## [3.1.4] - 2023-12-18 + +### Fixed + +- Make more robust the fix for possible null exception at handling task execution response. + +## [3.1.3] - 2023-12-17 + +### Fixed + +- Fix possible null exception at handling task execution response. + +## [3.1.2] - 2023-12-17 + +### Fixed + +- Wait for queued tasks to end at worker node termination. + +## [3.1.1] - 2023-12-16 + +### Fixed + +- Fix pool options TS type definition. + +## [3.1.0] - 2023-12-16 + +### Changed + +- TypeScript breaking change: merge ThreadPoolOptions and ClusterPoolOptions types into PoolOptions type. + +## [3.0.14] - 2023-12-13 + +### Fixed + +- Fix possible null exception with worker_threads pools. + +## [3.0.13] - 2023-12-12 + +### Fixed + +- Ensure worker choice strategy wait for worker nodes readiness. + +### Changed + +- Remove infinite retries support in worker choice strategy to avoid configuration leading to possible infinite recursion or loop. + +## [3.0.12] - 2023-12-12 + +### Changed + +- Add infinite retries support in worker choice strategy. + +## [3.0.11] - 2023-12-11 + +### Fixed + +- Ensure pool asynchronous resource properly track tasks execution. + +## [3.0.10] - 2023-12-08 + +### Changed + +- Add a fastpath when tasks stealing or redistribution is impossible. + +## [3.0.9] - 2023-11-26 + +### Fixed + +- Remove all pool events listener at pool destroying. +- Remove all worker node events listener at worker node destroying. +- Fix worker node event emitter listeners handling memory leak at pool options runtime change. + +## [3.0.8] - 2023-11-25 + +### Fixed + +- Ensure continuous tasks stealing on idle start at worker node idling. + +## [3.0.7] - 2023-11-24 + +### Changed + +- Make continuous tasks stealing start at worker node idling. + +## [3.0.6] - 2023-11-24 + +### Fixed + +- Ensure pool statuses are checked at initialization, `start()` or `destroy()`. +- Ensure pool `ready` event can be emitted after several `start()/destroy()` cycles. + +## [3.0.5] - 2023-10-27 + +### Fixed + +- Ensure pool `ready` event can be emitted only once. + +## [3.0.4] - 2023-10-20 + +### Changed + +- Switch to Bencher for benchmarking: [https://bencher.dev/perf/poolifier](https://bencher.dev/perf/poolifier). +- Use builtin retry mechanism in worker choice strategies instead of custom one. + +## [3.0.3] - 2023-10-19 + +### Fixed + +- Avoid null exception at sending message to worker. +- Avoid null exception at checking worker node readiness. + +## [3.0.2] - 2023-10-17 + +### Fixed + +- 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). + +## [3.0.1] - 2023-10-16 + +### Fixed + +- Workaround possible race condition at work nodes array element removal and querying. See issue [#1468](https://github.com/poolifier/poolifier/issues/1468). + +### Changed + +- Switch the worker node eventing code to `EventTarget` API. + +## [3.0.0] - 2023-10-08 + +### Changed + +- Remove Node.js 16.x.x (EOL) support. + +## [2.7.5] - 2023-10-03 + +### Changed + +- Use `EventEmitterAsyncResource` type from `@types/node` for pool event emitter. TypeScript users will need to update to latest `@types/node` version. + +## [2.7.4] - 2023-09-25 + +### Fixed + +- Fix source maps (bundler issue). + +## [2.7.3] - 2023-09-24 + +### Changed + +- Convert pool event emitter to event emitter async resource. + +## [2.7.2] - 2023-09-23 + +### Changed + +- Add source maps to npm package to ease debugging. + +### Added + +- Continuous benchmarking versus other worker pools: [https://poolifier.github.io/benchmark](https://poolifier.github.io/benchmark). + +## [2.7.1] - 2023-09-20 + +### Fixed + +- Ensure worker message listener used one time are removed after usage. + +## [2.7.0] - 2023-09-19 + +### Fixed + +- Fix task stealing related tasks queue options handling at runtime. + +### Changed + +- Rename `listTaskFunctions()` to `listTaskFunctionNames()` in pool and worker API. + +### Added + +- Add `hasTaskFunction()`, `addTaskFunction()`, `removeTaskFunction()`, `setDefaultTaskFunction()` methods to pool API: [PR #1148](https://github.com/poolifier/poolifier/pull/1148). +- Stricter worker constructor arguments validation. + +## [2.6.45] - 2023-09-17 + +### Changed + +- Disable publication on GitHub packages registry on release until authentication issue is fixed. + +### Added + +- Add `startWorkers` to pool options to whether start the minimum number of workers at pool initialization or not. +- Add `start()` method to pool API to start the minimum number of workers. +- Add `taskStealing` and `tasksStealingOnPressure` to tasks queue options to whether enable task stealing or not and whether enable tasks stealing under back pressure or not. +- Continuous internal benchmarking: [https://poolifier.github.io/benchmark-results/dev/bench](https://poolifier.github.io/benchmark-results/dev/bench). + +## [2.6.44] - 2023-09-08 + +### Fixed + +- Use a dedicated PAT to publish on GitHub packages registry. + +### Added + +- Publish on GitHub packages registry on release. + +### Changed + +- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128). + +## [2.6.43] - 2023-09-08 + +### Added + +- Publish on GitHub packages registry on release. + +### Changed + +- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128). + +## [2.6.42] - 2023-09-06 + +### Changed + +- Optimize hot code paths implementation: avoid unnecessary branching, add and use optimized helpers (min, max), use reduce() array helper, ... + +## [2.6.41] - 2023-09-03 + +### Changed + +- Optimize worker choice strategies implementation. + +## [2.6.40] - 2023-09-01 + +### Fixed + +- Do not pre-choose in WRR worker choice strategy to avoid bias. +- Avoid array out of bound in worker choice strategies after worker node removal. + +## [2.6.39] - 2023-08-30 + +### Fixed + +- Fix race condition in worker choice strategies at worker node info querying while not yet initialized. + +## [2.6.38] - 2023-08-30 + +### Added + +- Bundle typescript types declaration into one file. + +### Changed + +- Improve interleaved weighted round robin worker choice strategy implementation. + +## [2.6.37] - 2023-08-28 + +### Fixed + +- Ensure unused worker usage statistics are deleted at runtime. + +### Changed + +- Rename worker choice strategy options `choiceRetries` to `retries`. +- Avoid unnecessary branching in worker choice strategies. + +## [2.6.36] - 2023-08-27 + +### Fixed + +- Fix pool `execute()` arguments check. + +### Changed + +- Make continuous tasks stealing algorithm less aggressive. +- Fine tune tasks stealing algorithm under back pressure. + +## [2.6.35] - 2023-08-25 + +### Fixed + +- Don't account worker usage statistics for tasks that have failed. +- Fix pool information runtime and wait time median computation. + +### Changed + +- Update simple moving average implementation to use a circular buffer. +- Update simple moving median implementation to use a circular buffer. +- Account for stolen tasks in worker usage statistics and pool information. + +### Added + +- Continuous tasks stealing algorithm. + +## [2.6.34] - 2023-08-24 + +### Fixes + +- Avoid cascading tasks stealing under back pressure. + +### Changed + +- Add fastpath to queued tasks rescheduling. + +## [2.6.33] - 2023-08-24 + +### Fixed + +- Fix queued tasks rescheduling. + +### Changed + +- Rename tasks queue options `queueMaxSize` to `size`. + +### Added + +- Task stealing scheduling algorithm if tasks queueing is enabled. + +## [2.6.32] - 2023-08-23 + +### Fixed + +- Ensure no task can be executed when the pool is destroyed. + +### Added + +- Add `queueMaxSize` option to tasks queue options. +- Add O(1) deque implementation implemented with doubly linked list and use it for tasks queueing. +- Add tasks stealing algorithm when a worker node queue is back pressured if tasks queueing is enabled. + +## [2.6.31] - 2023-08-20 + ### Fixed - Fix worker choice strategy retries mechanism in some edge cases. ### Changed -- Make orthogonal worker choice strategies tasks distribution and dynamic worker creation usage. +- Make orthogonal worker choice strategies tasks distribution and created dynamic worker usage. +- Remove the experimental status of the `LEAST_ELU` worker choice strategy. ## [2.6.30] - 2023-08-19 @@ -27,7 +532,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix race condition between ready and task functions worker message handling at startup. +- Fix race condition between readiness and task functions worker message handling at startup. - Fix duplicate task function worker usage statistics computation per task function. - Update task function worker usage statistics if and only if there's at least two different task functions. - Fix race condition at task function worker usage executing task computation leading to negative value. @@ -68,7 +573,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add kill handler to worker options allowing to execute custom code when worker is killed. - Add `listTaskFunctions()` method to pool API. -- SMTP server pool example: nodemailer. +- SMTP client pool example: nodemailer. ## [2.6.25] - 2023-08-13 @@ -504,7 +1009,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Optimize worker alive status check. - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`. - Optimize `LESS_USED` worker choice strategy. -- Update benchmarks versus external threads pools. +- Update benchmark versus external threads pools. - Optimize tasks usage statistics requirements for worker choice strategy. ### Fixed @@ -526,7 +1031,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Optimize worker alive status check. - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`. - Optimize `LESS_USED` worker choice strategy. -- Update benchmarks versus external threads pools. +- Update benchmark versus external threads pools. ### Fixed @@ -692,7 +1197,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Optimize fair share task scheduling algorithm implementation. -- Update benchmarks versus external pools results with latest version. +- Update benchmark versus external pools results with latest version. ## [2.3.3] - 2022-10-15