Send 'Retry-After' to comply with RFC6585.
This commit is contained in:
parent
027093a5a5
commit
8d75aba7eb
29 changed files with 435 additions and 172 deletions
9
vendor/github.com/vulcand/oxy/ratelimit/bucket.go
generated
vendored
9
vendor/github.com/vulcand/oxy/ratelimit/bucket.go
generated
vendored
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/mailgun/timetools"
|
||||
)
|
||||
|
||||
// UndefinedDelay default delay
|
||||
const UndefinedDelay = -1
|
||||
|
||||
// rate defines token bucket parameters.
|
||||
|
@ -20,7 +21,7 @@ func (r *rate) String() string {
|
|||
return fmt.Sprintf("rate(%v/%v, burst=%v)", r.average, r.period, r.burst)
|
||||
}
|
||||
|
||||
// Implements token bucket algorithm (http://en.wikipedia.org/wiki/Token_bucket)
|
||||
// tokenBucket Implements token bucket algorithm (http://en.wikipedia.org/wiki/Token_bucket)
|
||||
type tokenBucket struct {
|
||||
// The time period controlled by the bucket in nanoseconds.
|
||||
period time.Duration
|
||||
|
@ -63,7 +64,7 @@ func (tb *tokenBucket) consume(tokens int64) (time.Duration, error) {
|
|||
tb.updateAvailableTokens()
|
||||
tb.lastConsumed = 0
|
||||
if tokens > tb.burst {
|
||||
return UndefinedDelay, fmt.Errorf("Requested tokens larger than max tokens")
|
||||
return UndefinedDelay, fmt.Errorf("requested tokens larger than max tokens")
|
||||
}
|
||||
if tb.availableTokens < tokens {
|
||||
return tb.timeTillAvailable(tokens), nil
|
||||
|
@ -83,11 +84,11 @@ func (tb *tokenBucket) rollback() {
|
|||
tb.lastConsumed = 0
|
||||
}
|
||||
|
||||
// Update modifies `average` and `burst` fields of the token bucket according
|
||||
// update modifies `average` and `burst` fields of the token bucket according
|
||||
// to the provided `Rate`
|
||||
func (tb *tokenBucket) update(rate *rate) error {
|
||||
if rate.period != tb.period {
|
||||
return fmt.Errorf("Period mismatch: %v != %v", tb.period, rate.period)
|
||||
return fmt.Errorf("period mismatch: %v != %v", tb.period, rate.period)
|
||||
}
|
||||
tb.timePerToken = time.Duration(int64(tb.period) / rate.average)
|
||||
tb.burst = rate.burst
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue