1
0
Fork 0
mirror of https://github.com/Luzifer/elastic_cron.git synced 2024-12-23 02:41:20 +00:00
elastic_cron/vendor/github.com/cenkalti/backoff
Knut Ahlers 1592d961b9
Vendor dependencies
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2017-04-02 14:12:58 +02:00
..
.gitignore Vendor dependencies 2017-04-02 14:12:58 +02:00
.travis.yml Vendor dependencies 2017-04-02 14:12:58 +02:00
backoff.go Vendor dependencies 2017-04-02 14:12:58 +02:00
exponential.go Vendor dependencies 2017-04-02 14:12:58 +02:00
LICENSE Vendor dependencies 2017-04-02 14:12:58 +02:00
README.md Vendor dependencies 2017-04-02 14:12:58 +02:00
retry.go Vendor dependencies 2017-04-02 14:12:58 +02:00
ticker.go Vendor dependencies 2017-04-02 14:12:58 +02:00

backoff

GoDoc Build Status

This is a Go port of the exponential backoff algorithm from google-http-java-client.

Exponential backoff is an algorithm that uses feedback to multiplicatively decrease the rate of some process, in order to gradually find an acceptable rate. The retries exponentially increase and stop increasing when a certain threshold is met.

Install

go get github.com/cenkalti/backoff

Example

Simple retry helper that uses exponential back-off algorithm:

operation := func() error {
    // An operation that might fail
}

err := backoff.Retry(operation, backoff.NewExponentialBackOff())
if err != nil {
    // handle error
}

// operation is successfull

Ticker example:

operation := func() error {
    // An operation that may fail
}

b := backoff.NewExponentialBackOff()
ticker := backoff.NewTicker(b)

var err error

// Ticks will continue to arrive when the previous operation is still running,
// so operations that take a while to fail could run in quick succession.
for t = range ticker.C {
    if err = operation(); err != nil {
        log.Println(err, "will retry...")
        continue
    }

    ticker.Stop()
    break
}

if err != nil {
    // Operation has failed.
}

// Operation is successfull.