rate_limiter

package
v0.0.0-...-436d200 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2023 License: BSD-3-Clause Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const TickInterval = 50 * time.Millisecond
View Source
const TicksPerSec = 20
View Source
const Unlimited = math.MaxFloat64

Variables

This section is empty.

Functions

This section is empty.

Types

type MockRateLimiter

type MockRateLimiter struct {
	// contains filtered or unexported fields
}

A mock rate limiter for external unittesting. The bucket is fill via the Tick call.

func NewMockRateLimiter

func NewMockRateLimiter() *MockRateLimiter

func (MockRateLimiter) HasStopped

func (l MockRateLimiter) HasStopped() bool

func (MockRateLimiter) MaxQuota

func (l MockRateLimiter) MaxQuota() float64

This returns the leaky bucket's maximum capacity.

func (MockRateLimiter) Quota

func (l MockRateLimiter) Quota() float64

This returns the current available quota.

func (MockRateLimiter) QuotaPerSec

func (l MockRateLimiter) QuotaPerSec() float64

This returns the leaky bucket's fill rate.

func (MockRateLimiter) SetMaxQuota

func (l MockRateLimiter) SetMaxQuota(q float64) error

This sets the leaky bucket's maximum capacity. The value must be non-negative.

func (*MockRateLimiter) SetQuota

func (l *MockRateLimiter) SetQuota(q float64)

func (MockRateLimiter) SetQuotaPerSec

func (l MockRateLimiter) SetQuotaPerSec(r float64) error

This sets the leaky bucket's fill rate. The value must be non-negative.

func (MockRateLimiter) Stop

func (l MockRateLimiter) Stop()

Stop the rate limiter.

func (MockRateLimiter) Throttle

func (l MockRateLimiter) Throttle(request float64) bool

This blocks until the request amount of resources is acquired. This returns false if the request can be satisfied immediately. Otherwise, this returns true.

NOTE: When maxQuota is zero, or when the rate limiter is stopped, this returns immediately.

func (*MockRateLimiter) Tick

func (l *MockRateLimiter) Tick()

func (MockRateLimiter) TryThrottle

func (l MockRateLimiter) TryThrottle(request float64) bool

type RateLimiter

type RateLimiter interface {
	// This returns the leaky bucket's maximum capacity.
	MaxQuota() float64

	// This sets the leaky bucket's maximum capacity.  The value must be non-negative.
	// Zero means "throttle everything". Unlimited means "throttle nothing".
	SetMaxQuota(q float64) error

	// This returns the leaky bucket's fill rate.
	QuotaPerSec() float64

	// This sets the leaky bucket's fill rate.  The value must be non-negative.
	SetQuotaPerSec(r float64) error

	// This returns the current available quota.
	Quota() float64

	// This blocks until the request amount of resources is acquired.  This
	// returns false if the request can be satisfied immediately.  Otherwise, this
	// returns true.
	//
	// NOTE: When maxQuota is zero, or when the rate limiter is stopped,
	// this returns immediately.
	Throttle(request float64) bool

	// Like Throttle(), but does not block: returns false when NOT throttled,
	// and true when the request would have blocked under Throttle().
	TryThrottle(request float64) bool

	// Stop the rate limiter.
	Stop()

	HasStopped() bool
}

Interface for a thread-safe leaky bucket rate limiter.

func NewRateLimiter

func NewRateLimiter(
	maxQuota float64,
	quotaPerSec float64) (
	RateLimiter,
	error)

func NewUnthrottledRateLimiter

func NewUnthrottledRateLimiter() (RateLimiter, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL