icingabeat/vendor/github.com/elastic/beats/winlogbeat/eventlog/retry.go

25 lines
666 B
Go

package eventlog
// retry invokes the retriable function. If the retriable function returns an
// error then the corrective action function is invoked and passed the error.
// The correctiveAction function should attempt to correct the error so that
// retriable can be invoked again.
func retry(retriable func() error, correctiveAction func(error) error) error {
err := retriable()
if err != nil {
caErr := correctiveAction(err)
if caErr != nil {
// Something went wrong, return original error.
return err
}
retryErr := retriable()
if retryErr != nil {
// The second attempt failed, return original error.
return err
}
}
return nil
}