netmaker/netclient/ncutils/util.go
2022-02-15 10:11:24 -05:00

24 lines
592 B
Go

package ncutils
import (
"fmt"
"time"
)
// BackOff - back off any function while there is an error
func BackOff(isExponential bool, maxTime int, f interface{}) (interface{}, error) {
// maxTime seconds
startTime := time.Now()
sleepTime := time.Second
for time.Now().Before(startTime.Add(time.Second * time.Duration(maxTime))) {
if result, err := f.(func() (interface{}, error))(); err == nil {
return result, nil
}
time.Sleep(sleepTime)
if isExponential {
sleepTime = sleepTime << 1
}
PrintLog("retrying...", 1)
}
return nil, fmt.Errorf("could not find result")
}