retry: github.com/Rican7/retry Index | Examples | Files | Directories

package retry

import "github.com/Rican7/retry"

Package retry provides a simple, stateless, functional mechanism to perform actions repetitively until successful.

Copyright © 2016 Trevor N. Suarez (Rican7)

Code:

retry.Retry(func(attempt uint) error {
    return nil // Do something that may or may not cause an error
})

Code:

const logFilePath = "/var/log/myapp.log"

var logFile *os.File

err := retry.Retry(func(attempt uint) error {
    var err error

    logFile, err = os.Open(logFilePath)

    return err
})

if nil != err {
    log.Fatalf("Unable to open file %q with error %q", logFilePath, err)
}

logFile.Chdir() // Do something with the file

Code:

var response *http.Response

action := func(attempt uint) error {
    var err error

    response, err = http.Get("https://api.github.com/repos/Rican7/retry")

    if nil == err && nil != response && response.StatusCode > 200 {
        err = fmt.Errorf("failed to fetch (attempt #%d) with status code: %d", attempt, response.StatusCode)
    }

    return err
}

err := retry.Retry(
    action,
    strategy.Limit(5),
    strategy.Backoff(backoff.Fibonacci(10*time.Millisecond)),
)

if nil != err {
    log.Fatalf("Failed to fetch repository with error %q", err)
}

Code:

action := func(attempt uint) error {
    return errors.New("something happened")
}

seed := time.Now().UnixNano()
random := rand.New(rand.NewSource(seed))

retry.Retry(
    action,
    strategy.Limit(5),
    strategy.BackoffWithJitter(
        backoff.BinaryExponential(10*time.Millisecond),
        jitter.Deviation(random, 0.5),
    ),
)

Index

Examples

Package Files

retry.go

func Retry Uses

func Retry(action Action, strategies ...strategy.Strategy) error

Retry takes an action and performs it, repetitively, until successful.

Optionally, strategies may be passed that assess whether or not an attempt should be made.

type Action Uses

type Action func(attempt uint) error

Action defines a callable function that package retry can handle.

Directories

PathSynopsis
backoffPackage backoff provides stateless methods of calculating durations based on a number of attempts made.
jitterPackage jitter provides methods of transforming durations.
strategyPackage strategy provides a way to change the way that retry is performed.

Package retry imports 1 packages (graph) and is imported by 4 packages. Updated 2019-01-16. Refresh now. Tools for package owners.