|
1 | 1 | # Releases |
2 | 2 |
|
3 | | -## Unreleased |
| 3 | +## v2.0.0 |
4 | 4 |
|
5 | 5 | The 2.0.x release should be considered somewhat unstable. |
6 | 6 |
|
7 | | -- **Breaking**: Complete API redesign. The v1.x classes (`Async::Limiter::Concurrent`, `Async::Limiter::Unlimited`, etc.) have been replaced with a new inheritance-based architecture. |
8 | | -- **Breaking**: Removed `blocking?` method due to inherent race conditions. Use `acquire(timeout: 0)` for non-blocking checks. |
9 | | -- **Breaking**: Timing strategies now use consumption-only model (no explicit `release` methods). |
10 | | -- **Breaking**: Window classes moved from `limiter/window/` to `limiter/timing/` with renamed classes. |
| 7 | + - **Breaking**: Complete API redesign. The v1.x classes (`Async::Limiter::Concurrent`, `Async::Limiter::Unlimited`, etc.) have been replaced with a new inheritance-based architecture. |
| 8 | + - **Breaking**: Removed `blocking?` method due to inherent race conditions. Use `acquire(timeout: 0)` for non-blocking checks. |
| 9 | + - **Breaking**: Timing strategies now use consumption-only model (no explicit `release` methods). |
| 10 | + - **Breaking**: Window classes moved from `limiter/window/` to `limiter/timing/` with renamed classes. |
11 | 11 |
|
12 | 12 | ### New Architecture (replaces v1.x classes) |
13 | 13 |
|
14 | | -- **New**: `Async::Limiter::Generic` - Unlimited concurrency with timing coordination (replaces `Async::Limiter::Unlimited`). |
15 | | -- **New**: `Async::Limiter::Limited` - Counting semaphore with configurable limits (replaces `Async::Limiter::Concurrent`). |
16 | | -- **New**: `Async::Limiter::Queued` - Queue-based resource distribution with priority/timeout support (completely new functionality). |
| 14 | + - **New**: `Async::Limiter::Generic` - Unlimited concurrency with timing coordination (replaces `Async::Limiter::Unlimited`). |
| 15 | + - **New**: `Async::Limiter::Limited` - Counting semaphore with configurable limits (replaces `Async::Limiter::Concurrent`). |
| 16 | + - **New**: `Async::Limiter::Queued` - Queue-based resource distribution with priority/timeout support (completely new functionality). |
17 | 17 |
|
18 | 18 | ### Advanced Timeout Features |
19 | 19 |
|
20 | | -- **New**: Unified timeout API - `acquire(timeout: 0/nil/seconds)` provides non-blocking and timed acquisition. |
21 | | -- **New**: Precise deadline tracking using `Async::Deadline` (requires async v2.31.0+). |
22 | | -- **New**: Convoy effect prevention - quick timeout operations not blocked by slow operations. |
23 | | -- **New**: Accurate timeout propagation - remaining time correctly passed through timing and concurrency layers. |
| 20 | + - **New**: Unified timeout API - `acquire(timeout: 0/nil/seconds)` provides non-blocking and timed acquisition. |
| 21 | + - **New**: Precise deadline tracking using `Async::Deadline` (requires async v2.31.0+). |
| 22 | + - **New**: Convoy effect prevention - quick timeout operations not blocked by slow operations. |
| 23 | + - **New**: Accurate timeout propagation - remaining time correctly passed through timing and concurrency layers. |
24 | 24 |
|
25 | 25 | ### Cost-Based Acquisition |
26 | 26 |
|
27 | | -- **New**: Cost-based acquisition - `acquire(cost: 1.5)` for proportional resource consumption. |
28 | | -- **New**: Starvation prevention - validates cost against timing strategy `maximum_cost` capacity. |
29 | | -- **New**: Flexible operation weighting - light operations consume fewer resources than heavy ones. |
| 27 | + - **New**: Cost-based acquisition - `acquire(cost: 1.5)` for proportional resource consumption. |
| 28 | + - **New**: Starvation prevention - validates cost against timing strategy `maximum_cost` capacity. |
| 29 | + - **New**: Flexible operation weighting - light operations consume fewer resources than heavy ones. |
30 | 30 |
|
31 | 31 | ### Enhanced Timing Strategies |
32 | 32 |
|
33 | | -- Add `Async::Limiter::Timing::LeakyBucket` for token bucket rate limiting with automatic leaking. |
34 | | -- Add `Async::Limiter::Timing::FixedWindow` for discrete time boundary enforcement. |
35 | | -- Rename `Async::Limiter::Timing::Window` to `Async::Limiter::Timing::SlidingWindow` for clarity. |
36 | | -- **Breaking**: Remove `release` methods from timing strategies (consumption-only model). |
37 | | -- **Breaking**: Remove `try_acquire` methods from timing strategies (unified timeout API). |
| 33 | + - Add `Async::Limiter::Timing::LeakyBucket` for token bucket rate limiting with automatic leaking. |
| 34 | + - Add `Async::Limiter::Timing::FixedWindow` for discrete time boundary enforcement. |
| 35 | + - Rename `Async::Limiter::Timing::Window` to `Async::Limiter::Timing::SlidingWindow` for clarity. |
| 36 | + - **Breaking**: Remove `release` methods from timing strategies (consumption-only model). |
| 37 | + - **Breaking**: Remove `try_acquire` methods from timing strategies (unified timeout API). |
38 | 38 |
|
39 | 39 | ### Token-Based Resource Management |
40 | 40 |
|
41 | | -- **New**: `acquire_token` method returns `Token` objects for advanced resource management. |
42 | | -- **New**: Token re-acquisition with different options - `token.acquire(priority: 5)`. |
43 | | -- **New**: Automatic token cleanup with block usage. |
| 41 | + - **New**: `acquire_token` method returns `Token` objects for advanced resource management. |
| 42 | + - **New**: Token re-acquisition with different options - `token.acquire(priority: 5)`. |
| 43 | + - **New**: Automatic token cleanup with block usage. |
44 | 44 |
|
45 | 45 | ### Thread Safety and Performance |
46 | 46 |
|
47 | | -- **New**: Race condition elimination by moving timing coordination inside mutex. |
48 | | -- **New**: Fast path optimizations using `deadline.expired?` checks. |
49 | | -- **New**: Atomic timing coordination prevents race conditions in concurrent access. |
50 | | -- **Improved**: Test performance using time simulation instead of actual sleep calls. |
| 47 | + - **New**: Race condition elimination by moving timing coordination inside mutex. |
| 48 | + - **New**: Fast path optimizations using `deadline.expired?` checks. |
| 49 | + - **New**: Atomic timing coordination prevents race conditions in concurrent access. |
| 50 | + - **Improved**: Test performance using time simulation instead of actual sleep calls. |
0 commit comments