Skip to content

Commit 378c0b5

Browse files
Rename BurstStrategy -> Burst.
1 parent 8b0c37c commit 378c0b5

File tree

14 files changed

+44
-44
lines changed

14 files changed

+44
-44
lines changed

context/generic-limiter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Async do
101101
# 1-second window:
102102
1.0,
103103
# Allow bursting:
104-
Async::Limiter::Timing::BurstStrategy::Greedy,
104+
Async::Limiter::Timing::Burst::Greedy,
105105
# 5 operations per second:
106106
5
107107
)

context/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ Async do
115115
# Max 3 tasks within any 1-second sliding window
116116
timing = Async::Limiter::Timing::SlidingWindow.new(
117117
1.0, # 1-second window.
118-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursting
118+
Async::Limiter::Timing::Burst::Greedy, # Allow bursting
119119
3 # 3 tasks per window
120120
)
121121

context/timing-strategies.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Provides smooth rate limiting with continuous rolling time windows:
4343
# Allow 3 operations within any 1-second sliding window
4444
timing = Async::Limiter::Timing::SlidingWindow.new(
4545
1.0, # 1-second window
46-
Async::Limiter::Timing::BurstStrategy::Greedy, # Burst behavior
46+
Async::Limiter::Timing::Burst::Greedy, # Burst behavior
4747
3 # 3 operations per window
4848
)
4949

@@ -67,14 +67,14 @@ Different burst behaviors affect how operations are scheduled:
6767
# Greedy: Allow immediate bursts up to the limit
6868
greedy_timing = Async::Limiter::Timing::SlidingWindow.new(
6969
2.0, # 2-second window
70-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursts
70+
Async::Limiter::Timing::Burst::Greedy, # Allow bursts
7171
6 # 6 operations per 2 seconds
7272
)
7373

7474
# Conservative: Spread operations evenly over time
7575
conservative_timing = Async::Limiter::Timing::SlidingWindow.new(
7676
2.0, # 2-second window
77-
Async::Limiter::Timing::BurstStrategy::Conservative, # Even distribution
77+
Async::Limiter::Timing::Burst::Conservative, # Even distribution
7878
6 # 6 operations per 2 seconds
7979
)
8080

@@ -107,7 +107,7 @@ Operations can consume different amounts of the rate limit:
107107
```ruby
108108
timing = Async::Limiter::Timing::SlidingWindow.new(
109109
1.0, # 1-second window
110-
Async::Limiter::Timing::BurstStrategy::Greedy,
110+
Async::Limiter::Timing::Burst::Greedy,
111111
10.0 # 10 units per second
112112
)
113113

@@ -143,7 +143,7 @@ Provides rate limiting with discrete time boundaries:
143143
# Allow 5 operations per 2-second window with fixed boundaries
144144
timing = Async::Limiter::Timing::FixedWindow.new(
145145
2.0, # 2-second windows
146-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursting within window
146+
Async::Limiter::Timing::Burst::Greedy, # Allow bursting within window
147147
5 # 5 operations per window
148148
)
149149

@@ -166,7 +166,7 @@ end
166166
# Demonstrate window boundaries
167167
timing = Async::Limiter::Timing::FixedWindow.new(
168168
1.0, # 1-second windows
169-
Async::Limiter::Timing::BurstStrategy::Greedy,
169+
Async::Limiter::Timing::Burst::Greedy,
170170
3 # 3 operations per window
171171
)
172172

@@ -193,12 +193,12 @@ end
193193
```ruby
194194
# Greedy allows all operations immediately within each window
195195
greedy_timing = Async::Limiter::Timing::FixedWindow.new(
196-
2.0, Async::Limiter::Timing::BurstStrategy::Greedy, 4
196+
2.0, Async::Limiter::Timing::Burst::Greedy, 4
197197
)
198198

199199
# Conservative spreads operations evenly within each window
200200
conservative_timing = Async::Limiter::Timing::FixedWindow.new(
201-
2.0, Async::Limiter::Timing::BurstStrategy::Conservative, 4
201+
2.0, Async::Limiter::Timing::Burst::Conservative, 4
202202
)
203203

204204
puts "=== Greedy Fixed Window ==="
@@ -342,7 +342,7 @@ Pure rate limiting without concurrency constraints:
342342
```ruby
343343
# Unlimited concurrency, but rate limited
344344
timing = Async::Limiter::Timing::SlidingWindow.new(1.0,
345-
Async::Limiter::Timing::BurstStrategy::Greedy, 5)
345+
Async::Limiter::Timing::Burst::Greedy, 5)
346346

347347
limiter = Async::Limiter::Generic.new(timing: timing)
348348

@@ -389,7 +389,7 @@ queue = Async::Queue.new
389389

390390
# Add timing constraint
391391
timing = Async::Limiter::Timing::FixedWindow.new(2.0,
392-
Async::Limiter::Timing::BurstStrategy::Greedy, 4)
392+
Async::Limiter::Timing::Burst::Greedy, 4)
393393

394394
limiter = Async::Limiter::Queued.new(queue, timing: timing)
395395

@@ -484,7 +484,7 @@ class JobProcessor
484484
# Process jobs in batches every 30 seconds, up to 50 jobs per batch
485485
timing = Async::Limiter::Timing::FixedWindow.new(
486486
30.0, # 30-second windows
487-
Async::Limiter::Timing::BurstStrategy::Greedy,
487+
Async::Limiter::Timing::Burst::Greedy,
488488
50 # 50 jobs per window
489489
)
490490

fixtures/async/limiter/a_limiter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ module Limiter
133133
include Sus::Fixtures::Async::SchedulerContext
134134

135135
with Async::Limiter::Timing::SlidingWindow do
136-
let(:timing) {Async::Limiter::Timing::SlidingWindow.new(0.1, Async::Limiter::Timing::BurstStrategy::Greedy, 10)}
136+
let(:timing) {Async::Limiter::Timing::SlidingWindow.new(0.1, Async::Limiter::Timing::Burst::Greedy, 10)}
137137
let(:limiter) {subject.new(timing: timing)}
138138

139139
it "can acquire several times" do

guides/generic-limiter/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Async do
101101
# 1-second window:
102102
1.0,
103103
# Allow bursting:
104-
Async::Limiter::Timing::BurstStrategy::Greedy,
104+
Async::Limiter::Timing::Burst::Greedy,
105105
# 5 operations per second:
106106
5
107107
)

guides/getting-started/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ Async do
115115
# Max 3 tasks within any 1-second sliding window
116116
timing = Async::Limiter::Timing::SlidingWindow.new(
117117
1.0, # 1-second window.
118-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursting
118+
Async::Limiter::Timing::Burst::Greedy, # Allow bursting
119119
3 # 3 tasks per window
120120
)
121121

guides/timing-strategies/readme.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Provides smooth rate limiting with continuous rolling time windows:
4343
# Allow 3 operations within any 1-second sliding window
4444
timing = Async::Limiter::Timing::SlidingWindow.new(
4545
1.0, # 1-second window
46-
Async::Limiter::Timing::BurstStrategy::Greedy, # Burst behavior
46+
Async::Limiter::Timing::Burst::Greedy, # Burst behavior
4747
3 # 3 operations per window
4848
)
4949

@@ -67,14 +67,14 @@ Different burst behaviors affect how operations are scheduled:
6767
# Greedy: Allow immediate bursts up to the limit
6868
greedy_timing = Async::Limiter::Timing::SlidingWindow.new(
6969
2.0, # 2-second window
70-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursts
70+
Async::Limiter::Timing::Burst::Greedy, # Allow bursts
7171
6 # 6 operations per 2 seconds
7272
)
7373

7474
# Conservative: Spread operations evenly over time
7575
conservative_timing = Async::Limiter::Timing::SlidingWindow.new(
7676
2.0, # 2-second window
77-
Async::Limiter::Timing::BurstStrategy::Conservative, # Even distribution
77+
Async::Limiter::Timing::Burst::Conservative, # Even distribution
7878
6 # 6 operations per 2 seconds
7979
)
8080

@@ -107,7 +107,7 @@ Operations can consume different amounts of the rate limit:
107107
```ruby
108108
timing = Async::Limiter::Timing::SlidingWindow.new(
109109
1.0, # 1-second window
110-
Async::Limiter::Timing::BurstStrategy::Greedy,
110+
Async::Limiter::Timing::Burst::Greedy,
111111
10.0 # 10 units per second
112112
)
113113

@@ -143,7 +143,7 @@ Provides rate limiting with discrete time boundaries:
143143
# Allow 5 operations per 2-second window with fixed boundaries
144144
timing = Async::Limiter::Timing::FixedWindow.new(
145145
2.0, # 2-second windows
146-
Async::Limiter::Timing::BurstStrategy::Greedy, # Allow bursting within window
146+
Async::Limiter::Timing::Burst::Greedy, # Allow bursting within window
147147
5 # 5 operations per window
148148
)
149149

@@ -166,7 +166,7 @@ end
166166
# Demonstrate window boundaries
167167
timing = Async::Limiter::Timing::FixedWindow.new(
168168
1.0, # 1-second windows
169-
Async::Limiter::Timing::BurstStrategy::Greedy,
169+
Async::Limiter::Timing::Burst::Greedy,
170170
3 # 3 operations per window
171171
)
172172

@@ -193,12 +193,12 @@ end
193193
```ruby
194194
# Greedy allows all operations immediately within each window
195195
greedy_timing = Async::Limiter::Timing::FixedWindow.new(
196-
2.0, Async::Limiter::Timing::BurstStrategy::Greedy, 4
196+
2.0, Async::Limiter::Timing::Burst::Greedy, 4
197197
)
198198

199199
# Conservative spreads operations evenly within each window
200200
conservative_timing = Async::Limiter::Timing::FixedWindow.new(
201-
2.0, Async::Limiter::Timing::BurstStrategy::Conservative, 4
201+
2.0, Async::Limiter::Timing::Burst::Conservative, 4
202202
)
203203

204204
puts "=== Greedy Fixed Window ==="
@@ -342,7 +342,7 @@ Pure rate limiting without concurrency constraints:
342342
```ruby
343343
# Unlimited concurrency, but rate limited
344344
timing = Async::Limiter::Timing::SlidingWindow.new(1.0,
345-
Async::Limiter::Timing::BurstStrategy::Greedy, 5)
345+
Async::Limiter::Timing::Burst::Greedy, 5)
346346

347347
limiter = Async::Limiter::Generic.new(timing: timing)
348348

@@ -389,7 +389,7 @@ queue = Async::Queue.new
389389

390390
# Add timing constraint
391391
timing = Async::Limiter::Timing::FixedWindow.new(2.0,
392-
Async::Limiter::Timing::BurstStrategy::Greedy, 4)
392+
Async::Limiter::Timing::Burst::Greedy, 4)
393393

394394
limiter = Async::Limiter::Queued.new(queue, timing: timing)
395395

@@ -484,7 +484,7 @@ class JobProcessor
484484
# Process jobs in batches every 30 seconds, up to 50 jobs per batch
485485
timing = Async::Limiter::Timing::FixedWindow.new(
486486
30.0, # 30-second windows
487-
Async::Limiter::Timing::BurstStrategy::Greedy,
487+
Async::Limiter::Timing::Burst::Greedy,
488488
50 # 50 jobs per window
489489
)
490490

lib/async/limiter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
require_relative "limiter/timing/sliding_window"
99
require_relative "limiter/timing/fixed_window"
1010
require_relative "limiter/timing/leaky_bucket"
11-
require_relative "limiter/timing/burst_strategy"
11+
require_relative "limiter/timing/burst"
1212
require_relative "limiter/timing/ordered"
1313
require_relative "limiter/generic"
1414
require_relative "limiter/limited"

lib/async/limiter/timing/burst_strategy.rb renamed to lib/async/limiter/timing/burst.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module Timing
2525
# 0s 60s 120s 180s
2626
# Tasks spread evenly: 0s, 12s, 24s, 36s, 48s
2727
#
28-
module BurstStrategy
28+
module Burst
2929
# Allows tasks to cluster within windows for high-throughput scenarios.
3030
#
3131
# Greedy strategies permit multiple tasks to start immediately as long as

lib/async/limiter/timing/sliding_window.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Copyright, 2025, by Samuel Williams.
55

66
require "async/clock"
7-
require_relative "burst_strategy"
7+
require_relative "burst"
88

99
module Async
1010
module Limiter
@@ -22,13 +22,13 @@ class SlidingWindow
2222

2323
# Initialize a window timing strategy.
2424
# @parameter duration [Numeric] Duration of the window in seconds.
25-
# @parameter burst_strategy [#can_acquire?] Controls bursting vs smooth behavior.
25+
# @parameter burst [#can_acquire?] Controls bursting vs smooth behavior.
2626
# @parameter limit [Integer] Maximum tasks per window.
27-
def initialize(duration, burst_strategy, limit)
27+
def initialize(duration, burst, limit)
2828
raise ArgumentError, "duration must be positive" unless duration.positive?
2929

3030
@duration = duration
31-
@burst_strategy = burst_strategy
31+
@burst = burst
3232
@limit = limit
3333

3434
@start_time = nil
@@ -56,7 +56,7 @@ def can_acquire?(cost = 1, current_time = Clock.now)
5656
frame_changed = frame_changed?(current_time)
5757

5858
# Check both window and frame constraints with cost
59-
@burst_strategy.can_acquire?(@count + cost - 1, @limit, frame_changed)
59+
@burst.can_acquire?(@count + cost - 1, @limit, frame_changed)
6060
end
6161

6262
# Record that a task was acquired.
@@ -80,7 +80,7 @@ def wait(mutex, deadline = nil, cost = 1)
8080
return false
8181
end
8282

83-
next_time = @burst_strategy.next_acquire_time(
83+
next_time = @burst.next_acquire_time(
8484
@start_time,
8585
@duration,
8686
@frame_start_time,

0 commit comments

Comments
 (0)