Atlas › Test

TestClockedRateLimiter_Wait_NoBurst

Exact test identity: go.temporal.io/server/common/quotas/TestClockedRateLimiter_Wait_NoBurst

Package
go.temporal.io/server/common/quotas
Suite / test hierarchy
TestClockedRateLimiter_Wait_NoBurst
Test
TestClockedRateLimiter_Wait_NoBurst
Introduced at
TestClockedRateLimiter_Wait_NoBurst Frontier kind: Test frontier
Covered ranges
7
Covered lines
29
Covered files
2

Covered source

Expand a file to inspect source; the > gutter marks covered lines.

go.temporal.io/server/common/quotas/clocked_rate_limiter.go 18 covered LOC · 5 ranges

Open complete file

25 )
26
27 > func NewClockedRateLimiter(rateLimiter *rate.Limiter, timeSource clock.TimeSource) ClockedRateLimiter { clocked_rate_limiter.go
28 > return ClockedRateLimiter{
29 > rateLimiter: rateLimiter,
30 > timeSource: timeSource,
31 > recycleCh: make(chan struct{}),
32 > }
33 > }
34
35 func (l ClockedRateLimiter) Allow() bool {
48 }
49
50 > func (r ClockedReservation) OK() bool { clocked_rate_limiter.go
51 > return r.reservation.OK()
52 > }
53
54 func (r ClockedReservation) Delay() time.Duration {
77 }
78
79 > func (l ClockedRateLimiter) Wait(ctx context.Context) error { clocked_rate_limiter.go
80 > return l.WaitN(ctx, 1)
81 > }
82
83 // WaitN is the only method that is different from rate.Limiter. We need to fully reimplement this method because
84 // the original method uses time.Now(), and does not allow us to pass in a time.Time. Fortunately, it can be built on
85 // top of ReserveN. However, there are some optimizations that we can make.
86 > func (l ClockedRateLimiter) WaitN(ctx context.Context, token int) error { clocked_rate_limiter.go
87 > reservation := ClockedReservation{l.rateLimiter.ReserveN(l.timeSource.Now(), token), l.timeSource}
88 > if !reservation.OK() {
89 > return fmt.Errorf("%w: WaitN(n=%d)", ErrRateLimiterReservationCannotBeMade, token) clocked_rate_limiter.go
90 > }
91
92 waitDuration := reservation.Delay()
go.temporal.io/server/common/clock/event_time_source.go 11 covered LOC · 2 ranges

Open complete file

39
40 // NewEventTimeSource returns a EventTimeSource with the current time set to Unix zero: 1970-01-01 00:00:00 +0000 UTC.
41 > func NewEventTimeSource() *EventTimeSource { event_time_source.go
42 > return &EventTimeSource{
43 > now: time.Unix(0, 0),
44 > }
45 > }
46
47 // Some clients depend on the fact that the runtime's timers do _not_ run synchronously.
55
56 // Now return the current time.
57 > func (ts *EventTimeSource) Now() time.Time { event_time_source.go
58 > ts.mu.RLock()
59 > defer ts.mu.RUnlock()
60 >
61 > return ts.now
62 > }
63
64 func (ts *EventTimeSource) Since(t time.Time) time.Duration {