mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Update godeps for juju ratelimit
This picked up an unrelated but missing change.
This commit is contained in:
parent
578d9fcf63
commit
3178433b9f
2
Godeps/Godeps.json
generated
2
Godeps/Godeps.json
generated
@ -1750,7 +1750,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/kardianos/osext",
|
"ImportPath": "github.com/kardianos/osext",
|
||||||
|
2
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
2
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
@ -480,7 +480,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/karlseguin/ccache",
|
"ImportPath": "github.com/karlseguin/ccache",
|
||||||
|
4
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
4
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go",
|
"ImportPath": "k8s.io/client-go",
|
||||||
"GoVersion": "go1.7",
|
"GoVersion": "go1.8",
|
||||||
"GodepVersion": "v79",
|
"GodepVersion": "v79",
|
||||||
"Packages": [
|
"Packages": [
|
||||||
"./..."
|
"./..."
|
||||||
@ -160,7 +160,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/mailru/easyjson/buffer",
|
"ImportPath": "github.com/mailru/easyjson/buffer",
|
||||||
|
@ -236,7 +236,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/mailru/easyjson/buffer",
|
"ImportPath": "github.com/mailru/easyjson/buffer",
|
||||||
|
@ -228,7 +228,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/mailru/easyjson/buffer",
|
"ImportPath": "github.com/mailru/easyjson/buffer",
|
||||||
|
@ -228,7 +228,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/juju/ratelimit",
|
"ImportPath": "github.com/juju/ratelimit",
|
||||||
"Rev": "77ed1c8a01217656d2080ad51981f6e99adaa177"
|
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/mailru/easyjson/buffer",
|
"ImportPath": "github.com/mailru/easyjson/buffer",
|
||||||
|
5
vendor/github.com/emicklei/go-restful-swagger12/BUILD
generated
vendored
5
vendor/github.com/emicklei/go-restful-swagger12/BUILD
generated
vendored
@ -37,9 +37,6 @@ filegroup(
|
|||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "all-srcs",
|
name = "all-srcs",
|
||||||
srcs = [
|
srcs = [":package-srcs"],
|
||||||
":package-srcs",
|
|
||||||
"//vendor/github.com/emicklei/go-restful-swagger12/test_package:all-srcs",
|
|
||||||
],
|
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
)
|
)
|
||||||
|
16
vendor/github.com/emicklei/go-restful-swagger12/test_package/BUILD
generated
vendored
16
vendor/github.com/emicklei/go-restful-swagger12/test_package/BUILD
generated
vendored
@ -1,16 +0,0 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
licenses(["notice"])
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
)
|
|
59
vendor/github.com/juju/ratelimit/ratelimit.go
generated
vendored
59
vendor/github.com/juju/ratelimit/ratelimit.go
generated
vendored
@ -2,7 +2,7 @@
|
|||||||
// Licensed under the LGPLv3 with static-linking exception.
|
// Licensed under the LGPLv3 with static-linking exception.
|
||||||
// See LICENCE file for details.
|
// See LICENCE file for details.
|
||||||
|
|
||||||
// The ratelimit package provides an efficient token bucket implementation
|
// Package ratelimit provides an efficient token bucket implementation
|
||||||
// that can be used to limit the rate of arbitrary things.
|
// that can be used to limit the rate of arbitrary things.
|
||||||
// See http://en.wikipedia.org/wiki/Token_bucket.
|
// See http://en.wikipedia.org/wiki/Token_bucket.
|
||||||
package ratelimit
|
package ratelimit
|
||||||
@ -21,6 +21,7 @@ type Bucket struct {
|
|||||||
capacity int64
|
capacity int64
|
||||||
quantum int64
|
quantum int64
|
||||||
fillInterval time.Duration
|
fillInterval time.Duration
|
||||||
|
clock Clock
|
||||||
|
|
||||||
// The mutex guards the fields following it.
|
// The mutex guards the fields following it.
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
@ -33,12 +34,37 @@ type Bucket struct {
|
|||||||
availTick int64
|
availTick int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clock is used to inject testable fakes.
|
||||||
|
type Clock interface {
|
||||||
|
Now() time.Time
|
||||||
|
Sleep(d time.Duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
// realClock implements Clock in terms of standard time functions.
|
||||||
|
type realClock struct{}
|
||||||
|
|
||||||
|
// Now is identical to time.Now.
|
||||||
|
func (realClock) Now() time.Time {
|
||||||
|
return time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sleep is identical to time.Sleep.
|
||||||
|
func (realClock) Sleep(d time.Duration) {
|
||||||
|
time.Sleep(d)
|
||||||
|
}
|
||||||
|
|
||||||
// NewBucket returns a new token bucket that fills at the
|
// NewBucket returns a new token bucket that fills at the
|
||||||
// rate of one token every fillInterval, up to the given
|
// rate of one token every fillInterval, up to the given
|
||||||
// maximum capacity. Both arguments must be
|
// maximum capacity. Both arguments must be
|
||||||
// positive. The bucket is initially full.
|
// positive. The bucket is initially full.
|
||||||
func NewBucket(fillInterval time.Duration, capacity int64) *Bucket {
|
func NewBucket(fillInterval time.Duration, capacity int64) *Bucket {
|
||||||
return NewBucketWithQuantum(fillInterval, capacity, 1)
|
return NewBucketWithClock(fillInterval, capacity, realClock{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBucketWithClock is identical to NewBucket but injects a testable clock
|
||||||
|
// interface.
|
||||||
|
func NewBucketWithClock(fillInterval time.Duration, capacity int64, clock Clock) *Bucket {
|
||||||
|
return NewBucketWithQuantumAndClock(fillInterval, capacity, 1, clock)
|
||||||
}
|
}
|
||||||
|
|
||||||
// rateMargin specifes the allowed variance of actual
|
// rateMargin specifes the allowed variance of actual
|
||||||
@ -51,12 +77,18 @@ const rateMargin = 0.01
|
|||||||
// at high rates, the actual rate may be up to 1% different from the
|
// at high rates, the actual rate may be up to 1% different from the
|
||||||
// specified rate.
|
// specified rate.
|
||||||
func NewBucketWithRate(rate float64, capacity int64) *Bucket {
|
func NewBucketWithRate(rate float64, capacity int64) *Bucket {
|
||||||
|
return NewBucketWithRateAndClock(rate, capacity, realClock{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBucketWithRateAndClock is identical to NewBucketWithRate but injects a
|
||||||
|
// testable clock interface.
|
||||||
|
func NewBucketWithRateAndClock(rate float64, capacity int64, clock Clock) *Bucket {
|
||||||
for quantum := int64(1); quantum < 1<<50; quantum = nextQuantum(quantum) {
|
for quantum := int64(1); quantum < 1<<50; quantum = nextQuantum(quantum) {
|
||||||
fillInterval := time.Duration(1e9 * float64(quantum) / rate)
|
fillInterval := time.Duration(1e9 * float64(quantum) / rate)
|
||||||
if fillInterval <= 0 {
|
if fillInterval <= 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
tb := NewBucketWithQuantum(fillInterval, capacity, quantum)
|
tb := NewBucketWithQuantumAndClock(fillInterval, capacity, quantum, clock)
|
||||||
if diff := math.Abs(tb.Rate() - rate); diff/rate <= rateMargin {
|
if diff := math.Abs(tb.Rate() - rate); diff/rate <= rateMargin {
|
||||||
return tb
|
return tb
|
||||||
}
|
}
|
||||||
@ -79,6 +111,12 @@ func nextQuantum(q int64) int64 {
|
|||||||
// the specification of the quantum size - quantum tokens
|
// the specification of the quantum size - quantum tokens
|
||||||
// are added every fillInterval.
|
// are added every fillInterval.
|
||||||
func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket {
|
func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket {
|
||||||
|
return NewBucketWithQuantumAndClock(fillInterval, capacity, quantum, realClock{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBucketWithQuantumAndClock is identical to NewBucketWithQuantum but injects
|
||||||
|
// a testable clock interface.
|
||||||
|
func NewBucketWithQuantumAndClock(fillInterval time.Duration, capacity, quantum int64, clock Clock) *Bucket {
|
||||||
if fillInterval <= 0 {
|
if fillInterval <= 0 {
|
||||||
panic("token bucket fill interval is not > 0")
|
panic("token bucket fill interval is not > 0")
|
||||||
}
|
}
|
||||||
@ -89,7 +127,8 @@ func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *
|
|||||||
panic("token bucket quantum is not > 0")
|
panic("token bucket quantum is not > 0")
|
||||||
}
|
}
|
||||||
return &Bucket{
|
return &Bucket{
|
||||||
startTime: time.Now(),
|
clock: clock,
|
||||||
|
startTime: clock.Now(),
|
||||||
capacity: capacity,
|
capacity: capacity,
|
||||||
quantum: quantum,
|
quantum: quantum,
|
||||||
avail: capacity,
|
avail: capacity,
|
||||||
@ -101,7 +140,7 @@ func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *
|
|||||||
// available.
|
// available.
|
||||||
func (tb *Bucket) Wait(count int64) {
|
func (tb *Bucket) Wait(count int64) {
|
||||||
if d := tb.Take(count); d > 0 {
|
if d := tb.Take(count); d > 0 {
|
||||||
time.Sleep(d)
|
tb.clock.Sleep(d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +152,7 @@ func (tb *Bucket) Wait(count int64) {
|
|||||||
func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool {
|
func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool {
|
||||||
d, ok := tb.TakeMaxDuration(count, maxWait)
|
d, ok := tb.TakeMaxDuration(count, maxWait)
|
||||||
if d > 0 {
|
if d > 0 {
|
||||||
time.Sleep(d)
|
tb.clock.Sleep(d)
|
||||||
}
|
}
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
@ -127,7 +166,7 @@ const infinityDuration time.Duration = 0x7fffffffffffffff
|
|||||||
// Note that if the request is irrevocable - there is no way to return
|
// Note that if the request is irrevocable - there is no way to return
|
||||||
// tokens to the bucket once this method commits us to taking them.
|
// tokens to the bucket once this method commits us to taking them.
|
||||||
func (tb *Bucket) Take(count int64) time.Duration {
|
func (tb *Bucket) Take(count int64) time.Duration {
|
||||||
d, _ := tb.take(time.Now(), count, infinityDuration)
|
d, _ := tb.take(tb.clock.Now(), count, infinityDuration)
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,14 +180,14 @@ func (tb *Bucket) Take(count int64) time.Duration {
|
|||||||
// wait until the tokens are actually available, and reports
|
// wait until the tokens are actually available, and reports
|
||||||
// true.
|
// true.
|
||||||
func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) {
|
func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) {
|
||||||
return tb.take(time.Now(), count, maxWait)
|
return tb.take(tb.clock.Now(), count, maxWait)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TakeAvailable takes up to count immediately available tokens from the
|
// TakeAvailable takes up to count immediately available tokens from the
|
||||||
// bucket. It returns the number of tokens removed, or zero if there are
|
// bucket. It returns the number of tokens removed, or zero if there are
|
||||||
// no available tokens. It does not block.
|
// no available tokens. It does not block.
|
||||||
func (tb *Bucket) TakeAvailable(count int64) int64 {
|
func (tb *Bucket) TakeAvailable(count int64) int64 {
|
||||||
return tb.takeAvailable(time.Now(), count)
|
return tb.takeAvailable(tb.clock.Now(), count)
|
||||||
}
|
}
|
||||||
|
|
||||||
// takeAvailable is the internal version of TakeAvailable - it takes the
|
// takeAvailable is the internal version of TakeAvailable - it takes the
|
||||||
@ -178,7 +217,7 @@ func (tb *Bucket) takeAvailable(now time.Time, count int64) int64 {
|
|||||||
// tokens could have changed in the meantime. This method is intended
|
// tokens could have changed in the meantime. This method is intended
|
||||||
// primarily for metrics reporting and debugging.
|
// primarily for metrics reporting and debugging.
|
||||||
func (tb *Bucket) Available() int64 {
|
func (tb *Bucket) Available() int64 {
|
||||||
return tb.available(time.Now())
|
return tb.available(tb.clock.Now())
|
||||||
}
|
}
|
||||||
|
|
||||||
// available is the internal version of available - it takes the current time as
|
// available is the internal version of available - it takes the current time as
|
||||||
|
Loading…
Reference in New Issue
Block a user