X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=CHANGELOG.md;h=0fe43abdff91300f83c2d96a3fef74b238a534fe;hb=251d6ac2d29d7361d671a8df17af51b414ea3b83;hp=dc94cb94b0909ce6bde32179231c6d2a058f9e1c;hpb=b6b3245344bd453ea91fa3d74acd5145f70d84fd;p=poolifier.git diff --git a/CHANGELOG.md b/CHANGELOG.md index dc94cb94..0fe43abd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,11 +9,330 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### 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 created dynamic worker usage. +- Remove the experimental status of the `LEAST_ELU` worker choice strategy. + +## [2.6.30] - 2023-08-19 + +### Fixed + +- Ensure pool event `backPressure` is emitted. +- Ensure pool event `full` is emitted only once. +- Ensure worker node cannot be instantiated without proper arguments. + +## [2.6.29] - 2023-08-18 + +### Fixed + +- Fix race condition between ready 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. + +### Added + +- 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). +- Use back pressure detection in worker choice strategies. +- Add worker choice strategies retries mechanism if no worker is eligible. + +## [2.6.28] - 2023-08-16 + +### Fixed + +- Ensure pool workers are properly initialized. + +### Added + +- HTTP server pool examples: express-cluster, express-hybrid. + +### Changed + +- Remove now useless branching in worker hot code path. + +## [2.6.27] - 2023-08-15 + +### Fixed + +- Add `KillHandler` type definition to exported types. + +### Added + +- Add `destroy` event to pool API. + +## [2.6.26] - 2023-08-15 + +### Added + +- 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. + +## [2.6.25] - 2023-08-13 + +### Added + +- HTTP server pool examples: fastify-cluster, fastify-hybrid. +- WebSocket server pool examples: ws-cluster, ws-hybrid. + +## [2.6.24] - 2023-08-12 + +### Added + +- Add array of transferable objects to the `execute()` method arguments. +- WebSocket server pool examples: ws-worker_threads. + +## [2.6.23] - 2023-08-11 + +### Fixed + +- 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. + +### Added + +- HTTP client pool examples: fetch, node-fetch and axios with multiple task functions. +- HTTP server pool examples: express-worker_threads, fastify-worker_threads. + +## [2.6.22] - 2023-08-10 + +### Fixed + +- Add missing `types` field to package.json `exports`. + +### Changed + +- Structure markdown documentation (PR #811). + +## [2.6.21] - 2023-08-03 + +### Changed + +- Improve code documentation. +- Code refactoring and cleanup for better maintainability and readability. + +## [2.6.20] - 2023-07-21 + +### Fixed + +- Fix queued tasks redistribution on error task execution starvation. +- Ensure tasks queueing per worker condition is untangled from the pool busyness semantic. + +### Changed + +- Drastically reduce lookups by worker in the worker nodes. + +## [2.6.19] - 2023-07-20 + +### Added + +- Dedicated internal communication channel for worker_threads pools. + +## [2.6.18] - 2023-07-19 + +### Changed + +- Code refactoring and cleanup for better maintainability and readability. Bundle size is a bit smaller. + +## [2.6.17] - 2023-07-16 + +### Added + +- Add `listTaskFunctions()` method to worker API. + +## [2.6.16] - 2023-07-12 + +### Fixed + +- Fix pool startup detection. +- Fix worker task functions handling. + +## [2.6.15] - 2023-07-11 + +### Added + +- Take into account worker node readiness in worker choice strategies. + +## [2.6.14] - 2023-07-10 + +### Fixed + +- Fix task function statistics tracking. + +## [2.6.13] - 2023-07-10 + +### Added + +- Add per task function statistics tracking. +- Add public methods to manipulate the worker task functions at runtime. + +## [2.6.12] - 2023-07-09 + +### Fixed + +- Workaround import issue with `node:os` module in node 16.x.x. + +## [2.6.11] - 2023-07-09 + +### Fixed + +- Fix pool readiness semantic. + +## [2.6.10] - 2023-07-08 + +### Fixed + +- Ensure workers are not recreated on error at pool startup. + +### Added + +- Add `ready` and `strategy` fields to pool information. +- Add pool event `ready` to notify when the number of workers created in the pool has reached the maximum size expected and are ready. +- Add dynamic pool sizing checks. + +## [2.6.9] - 2023-07-07 + +### Fixed + +- Recreate the right worker type on uncaught exception. + +### Added + +- Add minimum and maximum to internal measurement statistics. +- Add `runTime` and `waitTime` to pool information. +- Check worker inactive time only on dynamic worker. + +## [2.6.8] - 2023-07-03 + +### Fixed + +- Brown paper bag release to fix version handling in pool information. + +## [2.6.7] - 2023-07-03 + +### Fixed + +- Ensure worker queued tasks at error are reassigned to other pool workers. + +### Added + +- Add pool `utilization` ratio to pool information. +- Add `version` to pool information. +- Add worker information to worker nodes. + +## [2.6.6] - 2023-07-01 + +### Added + +- Add safe helper `availableParallelism()` to help sizing the pool. + +### Fixed + +- Ensure message handler is only registered in worker. + +## [2.6.5] - 2023-06-27 + +### Known issues + +- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782 + +### Fixed + +- Artificial version bump to 2.6.5 to workaround publication issue. +- Ensure cluster pool `destroy()` gracefully shutdowns worker's server. +- Ensure pool event is emitted before task error promise rejection. +- Fix queued tasks count computation. + +### Removed + +- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC. + +## [2.6.4] - 2023-06-27 + +### Known issues + +- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782 + +### Fixed + +- Ensure cluster pool `destroy()` gracefully shutdowns worker's server. +- Ensure pool event is emitted before task error promise rejection. +- Fix queued tasks count computation. + +### Removed + +- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC. + +## [2.6.3] - 2023-06-19 + +### Fixed + +- Ensure no tasks are queued when trying to soft kill a dynamic worker. +- Update strategies internals after statistics computation. + +### Changed + +- Optimize O(1) queue implementation. + +## [2.6.2] - 2023-06-12 + +### Fixed + +- Fix new worker use after creation in dynamic pool given the current worker choice strategy. + +## [2.6.1] - 2023-06-10 + +### Added + +- Add worker choice strategy documentation: [README.md](./docs/worker-choice-strategies.md). + +### Fixed + +- Fix average statistics computation: ensure failed tasks are not accounted. + +## [2.6.0] - 2023-06-09 + +### Added + +- Add `LEAST_ELU` worker choice strategy (experimental). +- Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy. + +### Changed + +- Refactor pool worker node usage internals. +- Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed. +- Breaking change: pool information `info` property object fields have been renamed. + +### Fixed + +- Fix wait time accounting. +- Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time. +- Ensure worker choice strategy `LEAST_USED` accounts also queued tasks. + +## [2.5.4] - 2023-06-07 + +### Added + - Add Event Loop Utilization (ELU) statistics to worker tasks usage. ### Changed - Compute statistics at the worker level only if needed. +- Add `worker_threads` options to thread pool options. + +### Fixed + +- Make the `LEAST_BUSY` strategy only relies on task runtime. ## [2.5.3] - 2023-06-04 @@ -43,7 +362,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Switch pool event emitter to `EventEmitterAsyncResource`. - Add tasks wait time accounting in per worker tasks usage. -- Add interleaved weighted round robin worker choice strategy (experimental). +- Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental). ### Changed @@ -93,7 +412,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix typescript type definition for worker function: ensure the input data is optional. +- Fix typescript type definition for task function: ensure the input data is optional. - Fix typescript type definition for pool execute(): ensure the input data is optional. ## [2.4.9] - 2023-04-15 @@ -110,7 +429,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix worker function type definition and validation. +- Fix task function type definition and validation. - Fix worker choice strategy options handling. ## [2.4.8] - 2023-04-12 @@ -135,7 +454,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Ensure one task at a time is executed per worker with tasks queueing enabled. -- Properly count worker running tasks with tasks queueing enabled. +- Properly count worker executing tasks with tasks queueing enabled. ## [2.4.5] - 2023-04-09 @@ -287,7 +606,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix `exports` syntax for ESM and CommonJS. +- Fix package.json `exports` syntax for ESM and CommonJS. ### Changed @@ -297,7 +616,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix `exports` syntax for ESM and CommonJS. +- Fix package.json `exports` syntax for ESM and CommonJS. ## [2.3.10-1] - 2023-03-18 @@ -309,7 +628,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix `exports` syntax for ESM and CommonJS. +- Fix package.json `exports` syntax for ESM and CommonJS. ## [2.3.9] - 2023-03-18 @@ -424,7 +743,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes -- Support only NodeJS version 16.x.x for cluster pool: upstream cluster API have changed on that version. +- Support only Node.js version 16.x.x for cluster pool: upstream cluster API have changed on that version. ## [2.1.0] - 2021-08-29 @@ -489,8 +808,8 @@ const { DynamicThreadPool } = require('poolifier') #### New type definitions for input data and response -For cluster worker and worker-thread pools, you can now only send and receive serializable data. -_This is not a limitation by poolifier but NodeJS._ +For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data. +_This is not a limitation by poolifier but Node.js._ #### Public property replacements