...

Package flowcontrol

import "k8s.io/client-go/util/flowcontrol"
Overview
Index

Overview ▾

type Backoff

type Backoff struct {
    sync.RWMutex
    Clock clock.Clock
    // contains filtered or unexported fields
}

func NewBackOff

func NewBackOff(initial, max time.Duration) *Backoff

func NewBackOffWithJitter

func NewBackOffWithJitter(initial, max time.Duration, maxJitterFactor float64) *Backoff

func NewFakeBackOff

func NewFakeBackOff(initial, max time.Duration, tc *testingclock.FakeClock) *Backoff

func NewFakeBackOffWithJitter

func NewFakeBackOffWithJitter(initial, max time.Duration, tc *testingclock.FakeClock, maxJitterFactor float64) *Backoff

func (*Backoff) DeleteEntry

func (p *Backoff) DeleteEntry(id string)

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) Get

func (p *Backoff) Get(id string) time.Duration

Get the current backoff Duration

func (*Backoff) IsInBackOffSince

func (p *Backoff) IsInBackOffSince(id string, eventTime time.Time) bool

Returns True if the elapsed time since eventTime is smaller than the current backoff window

func (*Backoff) IsInBackOffSinceUpdate

func (p *Backoff) IsInBackOffSinceUpdate(id string, eventTime time.Time) bool

Returns True if time since lastupdate is less than the current backoff window.

func (*Backoff) Next

func (p *Backoff) Next(id string, eventTime time.Time)

move backoff to the next mark, capping at maxDuration

func (*Backoff) Reset

func (p *Backoff) Reset(id string)

Reset forces clearing of all backoff data for a given key.

type Clock

An injectable, mockable clock interface.

type Clock interface {
    clock.PassiveClock
    Sleep(time.Duration)
}

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.