Skip to content

mark CheckError as experimental feature and add typical mistakes #163

@kamilsk

Description

@kamilsk

retry/strategy/strategy.go

Lines 102 to 144 in 19175c7

// ErrorHandler defines a function that CheckError can use
// to determine whether it should make the next attempt or not.
// Returning true allows for the next attempt to be made.
// Returning false halts the retrying process and returns the last error
// returned by the called Action.
type ErrorHandler func(error) bool
// CheckError creates a Strategy that checks an error and returns
// if an error is retriable or not. Otherwise, it returns the defaults.
func CheckError(handlers ...func(error) bool) Strategy {
// equal to go.octolab.org/errors.Retriable
type retriable interface {
error
Retriable() bool // Is the error retriable?
}
return func(_ Breaker, _ uint, err error) bool {
if err == nil {
return true
}
if err, is := err.(retriable); is {
return err.Retriable()
}
for _, handle := range handlers {
if !handle(err) {
return false
}
}
return true
}
}
// NetworkError creates an error Handler that checks an error and returns true
// if an error is the temporary network error.
// The Handler returns the defaults if an error is not a network error.
func NetworkError(defaults bool) func(error) bool {
return func(err error) bool {
if err, is := err.(net.Error); is {
return err.Temporary() || err.Timeout()
}
return defaults
}
}

TODO:

  • find bad case usage from goreleaser

Metadata

Metadata

Assignees

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions