netmaker/netclient/ncutils/util.go

30 lines
728 B
Go
Raw Normal View History

2022-02-04 05:34:34 +08:00
package ncutils
import (
"fmt"
"time"
"github.com/gravitl/netmaker/logger"
2022-02-04 05:34:34 +08:00
)
2022-09-29 03:22:12 +08:00
// CheckInInterval - the interval for check-in time in units/minute
const CheckInInterval = 1
2022-02-04 05:34:34 +08:00
// 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
}
logger.Log(1, "retrying...")
2022-02-04 05:34:34 +08:00
}
return nil, fmt.Errorf("could not find result")
}