forked from TrueCloudLab/restic
73 lines
1.2 KiB
Go
73 lines
1.2 KiB
Go
package backoff
|
|
|
|
import (
|
|
"log"
|
|
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
func ExampleRetry() {
|
|
// An operation that may fail.
|
|
operation := func() error {
|
|
return nil // or an error
|
|
}
|
|
|
|
err := Retry(operation, NewExponentialBackOff())
|
|
if err != nil {
|
|
// Handle error.
|
|
return
|
|
}
|
|
|
|
// Operation is successful.
|
|
}
|
|
|
|
func ExampleRetryContext() {
|
|
// A context
|
|
ctx := context.Background()
|
|
|
|
// An operation that may fail.
|
|
operation := func() error {
|
|
return nil // or an error
|
|
}
|
|
|
|
b := WithContext(NewExponentialBackOff(), ctx)
|
|
|
|
err := Retry(operation, b)
|
|
if err != nil {
|
|
// Handle error.
|
|
return
|
|
}
|
|
|
|
// Operation is successful.
|
|
}
|
|
|
|
func ExampleTicker() {
|
|
// An operation that may fail.
|
|
operation := func() error {
|
|
return nil // or an error
|
|
}
|
|
|
|
ticker := NewTicker(NewExponentialBackOff())
|
|
|
|
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 _ = range ticker.C {
|
|
if err = operation(); err != nil {
|
|
log.Println(err, "will retry...")
|
|
continue
|
|
}
|
|
|
|
ticker.Stop()
|
|
break
|
|
}
|
|
|
|
if err != nil {
|
|
// Operation has failed.
|
|
return
|
|
}
|
|
|
|
// Operation is successful.
|
|
return
|
|
}
|