Documentation ¶
Index ¶
- type Backoff
- func NewBackOff(initial, max time.Duration) *Backoff
- func NewBackOffWithJitter(initial, max time.Duration, maxJitterFactor float64) *Backoff
- func NewFakeBackOff(initial, max time.Duration, tc *testingclock.FakeClock) *Backoff
- func NewFakeBackOffWithJitter(initial, max time.Duration, tc *testingclock.FakeClock, ...) *Backoff
- func (p *Backoff) DeleteEntry(id string)
- func (p *Backoff) GC()
- func (p *Backoff) Get(id string) time.Duration
- func (p *Backoff) IsInBackOffSince(id string, eventTime time.Time) bool
- func (p *Backoff) IsInBackOffSinceUpdate(id string, eventTime time.Time) bool
- func (p *Backoff) Next(id string, eventTime time.Time)
- func (p *Backoff) Reset(id string)
- type Clock
- type PassiveRateLimiter
- type RateLimiter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Backoff ¶
func NewBackOff ¶
func NewBackOffWithJitter ¶
func NewFakeBackOff ¶
func NewFakeBackOff(initial, max time.Duration, tc *testingclock.FakeClock) *Backoff
func (*Backoff) DeleteEntry ¶
func (*Backoff) GC ¶
func (p *Backoff) GC()
Garbage collect records that have aged past maxDuration. Backoff users are expected to invoke this periodically.
func (*Backoff) IsInBackOffSince ¶
Returns True if the elapsed time since eventTime is smaller than the current backoff window
func (*Backoff) IsInBackOffSinceUpdate ¶
Returns True if time since lastupdate is less than the current backoff window.
type Clock ¶
type Clock interface { clock.PassiveClock Sleep(time.Duration) }
An injectable, mockable clock interface.
type PassiveRateLimiter ¶
type PassiveRateLimiter interface { // TryAccept returns true if a token is taken immediately. Otherwise, // it returns false. TryAccept() bool // Stop stops the rate limiter, subsequent calls to CanAccept will return false Stop() // QPS returns QPS of this rate limiter QPS() float32 }
func NewTokenBucketPassiveRateLimiter ¶
func NewTokenBucketPassiveRateLimiter(qps float32, burst int) PassiveRateLimiter
NewTokenBucketPassiveRateLimiter is similar to NewTokenBucketRateLimiter except that it returns a PassiveRateLimiter which does not have Accept() and Wait() methods.
func NewTokenBucketPassiveRateLimiterWithClock ¶
func NewTokenBucketPassiveRateLimiterWithClock(qps float32, burst int, c clock.PassiveClock) PassiveRateLimiter
NewTokenBucketPassiveRateLimiterWithClock is similar to NewTokenBucketRateLimiterWithClock except that it returns a PassiveRateLimiter which does not have Accept() and Wait() methods and uses a PassiveClock.
type RateLimiter ¶
type RateLimiter interface { PassiveRateLimiter // Accept returns once a token becomes available. Accept() // Wait returns nil if a token is taken before the Context is done. Wait(ctx context.Context) error }
func NewFakeAlwaysRateLimiter ¶
func NewFakeAlwaysRateLimiter() RateLimiter
func NewFakeNeverRateLimiter ¶
func NewFakeNeverRateLimiter() RateLimiter
func NewTokenBucketRateLimiter ¶
func NewTokenBucketRateLimiter(qps float32, burst int) RateLimiter
NewTokenBucketRateLimiter creates a rate limiter which implements a token bucket approach. The rate limiter allows bursts of up to 'burst' to exceed the QPS, while still maintaining a smoothed qps rate of 'qps'. The bucket is initially filled with 'burst' tokens, and refills at a rate of 'qps'. The maximum number of tokens in the bucket is capped at 'burst'.
func NewTokenBucketRateLimiterWithClock ¶
func NewTokenBucketRateLimiterWithClock(qps float32, burst int, c Clock) RateLimiter
NewTokenBucketRateLimiterWithClock is identical to NewTokenBucketRateLimiter but allows an injectable clock, for testing.