From f19c4976212eb66b1cd6e7a99341010a9ab35e2f Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Mon, 4 Feb 2019 16:38:08 +0100 Subject: [PATCH] Updates Backoff --- Gopkg.lock | 11 ++++++----- Gopkg.toml | 4 ++-- acme/acme.go | 2 +- acme/challenge_http_provider.go | 2 +- acme/challenge_tls_provider.go | 2 +- cluster/datastore.go | 2 +- cluster/leadership.go | 2 +- cmd/traefik/traefik.go | 2 +- job/job.go | 2 +- job/job_test.go | 2 +- old/provider/consulcatalog/consul_catalog.go | 2 +- old/provider/dynamodb/dynamodb.go | 2 +- old/provider/ecs/ecs.go | 2 +- old/provider/eureka/eureka.go | 2 +- old/provider/kubernetes/kubernetes.go | 2 +- old/provider/kv/kv.go | 2 +- old/provider/mesos/mesos.go | 2 +- old/provider/rancher/api.go | 2 +- old/provider/rancher/metadata.go | 2 +- provider/acme/challenge_http.go | 2 +- provider/acme/provider.go | 2 +- provider/docker/docker.go | 2 +- provider/marathon/marathon.go | 2 +- safe/routine.go | 2 +- safe/routine_test.go | 2 +- vendor/github.com/{cenk => cenkalti}/backoff/LICENSE | 0 .../github.com/{cenk => cenkalti}/backoff/backoff.go | 0 .../github.com/{cenk => cenkalti}/backoff/context.go | 11 +++++++---- .../{cenk => cenkalti}/backoff/exponential.go | 7 +------ .../github.com/{cenk => cenkalti}/backoff/retry.go | 12 ++++++++---- .../github.com/{cenk => cenkalti}/backoff/ticker.go | 2 -- .../github.com/{cenk => cenkalti}/backoff/tries.go | 0 32 files changed, 47 insertions(+), 46 deletions(-) rename vendor/github.com/{cenk => cenkalti}/backoff/LICENSE (100%) rename vendor/github.com/{cenk => cenkalti}/backoff/backoff.go (100%) rename vendor/github.com/{cenk => cenkalti}/backoff/context.go (84%) rename vendor/github.com/{cenk => cenkalti}/backoff/exponential.go (94%) rename vendor/github.com/{cenk => cenkalti}/backoff/retry.go (91%) rename vendor/github.com/{cenk => cenkalti}/backoff/ticker.go (97%) rename vendor/github.com/{cenk => cenkalti}/backoff/tries.go (100%) diff --git a/Gopkg.lock b/Gopkg.lock index 8b873bb2d..d27b28a79 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -299,12 +299,12 @@ revision = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9" [[projects]] - branch = "master" - digest = "1:97b8422f271b83e760ce1279715d0f5d124f267459b56806306a64a0f82721c9" - name = "github.com/cenk/backoff" + digest = "1:cdee563173093e5ae7ab2a19c298e0904129719e1919a3c532b7bb0c3398b818" + name = "github.com/cenkalti/backoff" packages = ["."] pruneopts = "NUT" - revision = "2ea60e5f094469f9e65adb9cd103795b73ae743e" + revision = "1e4cf3da559842a91afcb6ea6141451e6c30c618" + version = "v2.1.1" [[projects]] digest = "1:03cfacdc6bfd46007c15786c1ece3fa074f89e5193a292f0f26d9e98c99c7cc2" @@ -2278,7 +2278,7 @@ "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface", "github.com/aws/aws-sdk-go/service/ec2", "github.com/aws/aws-sdk-go/service/ecs", - "github.com/cenk/backoff", + "github.com/cenkalti/backoff", "github.com/containous/alice", "github.com/containous/flaeg", "github.com/containous/flaeg/parse", @@ -2364,6 +2364,7 @@ "github.com/vulcand/oxy/ratelimit", "github.com/vulcand/oxy/roundrobin", "github.com/vulcand/oxy/utils", + "github.com/vulcand/predicate", "github.com/xenolf/lego/certcrypto", "github.com/xenolf/lego/certificate", "github.com/xenolf/lego/challenge", diff --git a/Gopkg.toml b/Gopkg.toml index 92104fa72..7495314a7 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -54,8 +54,8 @@ version = "1.13.11" [[constraint]] - branch = "master" - name = "github.com/cenk/backoff" + name = "github.com/cenkalti/backoff" + version = "2.1.1" [[constraint]] name = "github.com/containous/flaeg" diff --git a/acme/acme.go b/acme/acme.go index 5e551392a..1a927f6bd 100644 --- a/acme/acme.go +++ b/acme/acme.go @@ -16,7 +16,7 @@ import ( "time" "github.com/BurntSushi/ty/fun" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/mux" "github.com/containous/staert" "github.com/containous/traefik/cluster" diff --git a/acme/challenge_http_provider.go b/acme/challenge_http_provider.go index 4b7bda321..aaf0fdf61 100644 --- a/acme/challenge_http_provider.go +++ b/acme/challenge_http_provider.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/cluster" "github.com/containous/traefik/log" "github.com/containous/traefik/safe" diff --git a/acme/challenge_tls_provider.go b/acme/challenge_tls_provider.go index 9b40acc34..9f35b6c7b 100644 --- a/acme/challenge_tls_provider.go +++ b/acme/challenge_tls_provider.go @@ -7,7 +7,7 @@ import ( "sync" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/cluster" "github.com/containous/traefik/log" "github.com/containous/traefik/safe" diff --git a/cluster/datastore.go b/cluster/datastore.go index 84eb4a73b..a9b7340b3 100644 --- a/cluster/datastore.go +++ b/cluster/datastore.go @@ -8,7 +8,7 @@ import ( "time" "github.com/abronan/valkeyrie/store" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/staert" "github.com/containous/traefik/job" "github.com/containous/traefik/log" diff --git a/cluster/leadership.go b/cluster/leadership.go index 7276cca03..f53aad6be 100644 --- a/cluster/leadership.go +++ b/cluster/leadership.go @@ -5,7 +5,7 @@ import ( "net/http" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/mux" "github.com/containous/traefik/log" "github.com/containous/traefik/old/types" diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index 089e2c338..4585ab902 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/flaeg" "github.com/containous/staert" "github.com/containous/traefik/autogen/genstatic" diff --git a/job/job.go b/job/job.go index 75ba1a796..658ed86ae 100644 --- a/job/job.go +++ b/job/job.go @@ -3,7 +3,7 @@ package job import ( "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" ) var ( diff --git a/job/job_test.go b/job/job_test.go index b51e67f9c..0f85e45f0 100644 --- a/job/job_test.go +++ b/job/job_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" ) func TestJobBackOff(t *testing.T) { diff --git a/old/provider/consulcatalog/consul_catalog.go b/old/provider/consulcatalog/consul_catalog.go index 46c71fdc5..87f2128ff 100644 --- a/old/provider/consulcatalog/consul_catalog.go +++ b/old/provider/consulcatalog/consul_catalog.go @@ -9,7 +9,7 @@ import ( "time" "github.com/BurntSushi/ty/fun" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/dynamodb/dynamodb.go b/old/provider/dynamodb/dynamodb.go index f280994da..3129bca60 100644 --- a/old/provider/dynamodb/dynamodb.go +++ b/old/provider/dynamodb/dynamodb.go @@ -12,7 +12,7 @@ import ( "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/ecs/ecs.go b/old/provider/ecs/ecs.go index 21dc4574b..5786e40e3 100644 --- a/old/provider/ecs/ecs.go +++ b/old/provider/ecs/ecs.go @@ -13,7 +13,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/ecs" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/eureka/eureka.go b/old/provider/eureka/eureka.go index 1d6b25a44..7c88afd44 100644 --- a/old/provider/eureka/eureka.go +++ b/old/provider/eureka/eureka.go @@ -5,7 +5,7 @@ import ( "time" "github.com/ArthurHlt/go-eureka-client/eureka" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/flaeg/parse" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" diff --git a/old/provider/kubernetes/kubernetes.go b/old/provider/kubernetes/kubernetes.go index 887dd7b2c..efbdaaa06 100644 --- a/old/provider/kubernetes/kubernetes.go +++ b/old/provider/kubernetes/kubernetes.go @@ -15,7 +15,7 @@ import ( "text/template" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/kv/kv.go b/old/provider/kv/kv.go index 0e5fb2fb3..d3dc33a90 100644 --- a/old/provider/kv/kv.go +++ b/old/provider/kv/kv.go @@ -8,7 +8,7 @@ import ( "github.com/abronan/valkeyrie" "github.com/abronan/valkeyrie/store" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/mesos/mesos.go b/old/provider/mesos/mesos.go index 34aedd419..13332f819 100644 --- a/old/provider/mesos/mesos.go +++ b/old/provider/mesos/mesos.go @@ -5,7 +5,7 @@ import ( "strings" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/provider" diff --git a/old/provider/rancher/api.go b/old/provider/rancher/api.go index 7610cdd1f..f34ff207d 100644 --- a/old/provider/rancher/api.go +++ b/old/provider/rancher/api.go @@ -5,7 +5,7 @@ import ( "os" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/types" diff --git a/old/provider/rancher/metadata.go b/old/provider/rancher/metadata.go index ea3c6a95f..e1efd403b 100644 --- a/old/provider/rancher/metadata.go +++ b/old/provider/rancher/metadata.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/job" "github.com/containous/traefik/old/log" "github.com/containous/traefik/old/types" diff --git a/provider/acme/challenge_http.go b/provider/acme/challenge_http.go index 26d827794..968bbc1f6 100644 --- a/provider/acme/challenge_http.go +++ b/provider/acme/challenge_http.go @@ -6,7 +6,7 @@ import ( "net/http" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/mux" "github.com/containous/traefik/log" "github.com/containous/traefik/safe" diff --git a/provider/acme/provider.go b/provider/acme/provider.go index 39f23cd34..fe932865f 100644 --- a/provider/acme/provider.go +++ b/provider/acme/provider.go @@ -13,7 +13,7 @@ import ( "sync" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/flaeg/parse" "github.com/containous/traefik/config" "github.com/containous/traefik/log" diff --git a/provider/docker/docker.go b/provider/docker/docker.go index cb160532e..bd97241bf 100644 --- a/provider/docker/docker.go +++ b/provider/docker/docker.go @@ -11,7 +11,7 @@ import ( "text/template" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/config" "github.com/containous/traefik/job" "github.com/containous/traefik/log" diff --git a/provider/marathon/marathon.go b/provider/marathon/marathon.go index 1689ba620..4df91e749 100644 --- a/provider/marathon/marathon.go +++ b/provider/marathon/marathon.go @@ -9,7 +9,7 @@ import ( "text/template" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/flaeg/parse" "github.com/containous/traefik/config" "github.com/containous/traefik/job" diff --git a/safe/routine.go b/safe/routine.go index 9e810f621..e6c15134a 100644 --- a/safe/routine.go +++ b/safe/routine.go @@ -6,7 +6,7 @@ import ( "runtime/debug" "sync" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" "github.com/containous/traefik/log" ) diff --git a/safe/routine_test.go b/safe/routine_test.go index 288b9c9b0..deaa3fc66 100644 --- a/safe/routine_test.go +++ b/safe/routine_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/cenk/backoff" + "github.com/cenkalti/backoff" ) func TestNewPoolContext(t *testing.T) { diff --git a/vendor/github.com/cenk/backoff/LICENSE b/vendor/github.com/cenkalti/backoff/LICENSE similarity index 100% rename from vendor/github.com/cenk/backoff/LICENSE rename to vendor/github.com/cenkalti/backoff/LICENSE diff --git a/vendor/github.com/cenk/backoff/backoff.go b/vendor/github.com/cenkalti/backoff/backoff.go similarity index 100% rename from vendor/github.com/cenk/backoff/backoff.go rename to vendor/github.com/cenkalti/backoff/backoff.go diff --git a/vendor/github.com/cenk/backoff/context.go b/vendor/github.com/cenkalti/backoff/context.go similarity index 84% rename from vendor/github.com/cenk/backoff/context.go rename to vendor/github.com/cenkalti/backoff/context.go index 5d1570925..7706faa2b 100644 --- a/vendor/github.com/cenk/backoff/context.go +++ b/vendor/github.com/cenkalti/backoff/context.go @@ -1,9 +1,8 @@ package backoff import ( + "context" "time" - - "golang.org/x/net/context" ) // BackOffContext is a backoff policy that stops retrying after the context @@ -52,9 +51,13 @@ func (b *backOffContext) Context() context.Context { func (b *backOffContext) NextBackOff() time.Duration { select { - case <-b.Context().Done(): + case <-b.ctx.Done(): return Stop default: - return b.BackOff.NextBackOff() } + next := b.BackOff.NextBackOff() + if deadline, ok := b.ctx.Deadline(); ok && deadline.Sub(time.Now()) < next { + return Stop + } + return next } diff --git a/vendor/github.com/cenk/backoff/exponential.go b/vendor/github.com/cenkalti/backoff/exponential.go similarity index 94% rename from vendor/github.com/cenk/backoff/exponential.go rename to vendor/github.com/cenkalti/backoff/exponential.go index d9de15a17..a031a6597 100644 --- a/vendor/github.com/cenk/backoff/exponential.go +++ b/vendor/github.com/cenkalti/backoff/exponential.go @@ -63,7 +63,6 @@ type ExponentialBackOff struct { currentInterval time.Duration startTime time.Time - random *rand.Rand } // Clock is an interface that returns current time for BackOff. @@ -89,7 +88,6 @@ func NewExponentialBackOff() *ExponentialBackOff { MaxInterval: DefaultMaxInterval, MaxElapsedTime: DefaultMaxElapsedTime, Clock: SystemClock, - random: rand.New(rand.NewSource(time.Now().UnixNano())), } b.Reset() return b @@ -118,10 +116,7 @@ func (b *ExponentialBackOff) NextBackOff() time.Duration { return Stop } defer b.incrementCurrentInterval() - if b.random == nil { - b.random = rand.New(rand.NewSource(time.Now().UnixNano())) - } - return getRandomValueFromInterval(b.RandomizationFactor, b.random.Float64(), b.currentInterval) + return getRandomValueFromInterval(b.RandomizationFactor, rand.Float64(), b.currentInterval) } // GetElapsedTime returns the elapsed time since an ExponentialBackOff instance diff --git a/vendor/github.com/cenk/backoff/retry.go b/vendor/github.com/cenkalti/backoff/retry.go similarity index 91% rename from vendor/github.com/cenk/backoff/retry.go rename to vendor/github.com/cenkalti/backoff/retry.go index 5dbd825b5..e936a506f 100644 --- a/vendor/github.com/cenk/backoff/retry.go +++ b/vendor/github.com/cenkalti/backoff/retry.go @@ -15,7 +15,6 @@ type Notify func(error, time.Duration) // Retry the operation o until it does not return error or BackOff stops. // o is guaranteed to be run at least once. -// It is the caller's responsibility to reset b after Retry returns. // // If o returns a *PermanentError, the operation is not retried, and the // wrapped error is returned. @@ -29,6 +28,7 @@ func Retry(o Operation, b BackOff) error { return RetryNotify(o, b, nil) } func RetryNotify(operation Operation, b BackOff, notify Notify) error { var err error var next time.Duration + var t *time.Timer cb := ensureContext(b) @@ -42,7 +42,7 @@ func RetryNotify(operation Operation, b BackOff, notify Notify) error { return permanent.Err } - if next = b.NextBackOff(); next == Stop { + if next = cb.NextBackOff(); next == Stop { return err } @@ -50,11 +50,15 @@ func RetryNotify(operation Operation, b BackOff, notify Notify) error { notify(err, next) } - t := time.NewTimer(next) + if t == nil { + t = time.NewTimer(next) + defer t.Stop() + } else { + t.Reset(next) + } select { case <-cb.Context().Done(): - t.Stop() return err case <-t.C: } diff --git a/vendor/github.com/cenk/backoff/ticker.go b/vendor/github.com/cenkalti/backoff/ticker.go similarity index 97% rename from vendor/github.com/cenk/backoff/ticker.go rename to vendor/github.com/cenkalti/backoff/ticker.go index e742512fd..e41084b0e 100644 --- a/vendor/github.com/cenk/backoff/ticker.go +++ b/vendor/github.com/cenkalti/backoff/ticker.go @@ -1,7 +1,6 @@ package backoff import ( - "runtime" "sync" "time" ) @@ -34,7 +33,6 @@ func NewTicker(b BackOff) *Ticker { } t.b.Reset() go t.run() - runtime.SetFinalizer(t, (*Ticker).Stop) return t } diff --git a/vendor/github.com/cenk/backoff/tries.go b/vendor/github.com/cenkalti/backoff/tries.go similarity index 100% rename from vendor/github.com/cenk/backoff/tries.go rename to vendor/github.com/cenkalti/backoff/tries.go