This section is empty.


This section is empty.


This section is empty.


type Backoff

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

func NewBackOff

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

func NewFakeBackOff

func NewFakeBackOff(initial, max time.Duration, tc *clock.FakeClock) *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

              type Clock interface {
              	Now() time.Time

                An injectable, mockable clock interface.

                type RateLimiter

                type RateLimiter interface {
                	// TryAccept returns true if a token is taken immediately. Otherwise,
                	// it returns false.
                	TryAccept() bool
                	// Accept returns once a token becomes available.
                	// Stop stops the rate limiter, subsequent calls to CanAccept will return false
                	// QPS returns QPS of this rate limiter
                	QPS() float32
                	// 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.