2021-05-11 17:10:51 +00:00
|
|
|
package privateinternetaccess
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/qdm12/golibs/logging"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func tryUntilSuccessful(ctx context.Context, logger logging.Logger, fn func() error) {
|
|
|
|
|
const initialRetryPeriod = 5 * time.Second
|
|
|
|
|
retryPeriod := initialRetryPeriod
|
|
|
|
|
for {
|
|
|
|
|
err := fn()
|
|
|
|
|
if err == nil {
|
|
|
|
|
break
|
|
|
|
|
}
|
2021-07-23 17:36:08 +00:00
|
|
|
logger.Error(err.Error())
|
2021-05-11 17:10:51 +00:00
|
|
|
logger.Info("Trying again in " + retryPeriod.String())
|
|
|
|
|
timer := time.NewTimer(retryPeriod)
|
|
|
|
|
select {
|
|
|
|
|
case <-timer.C:
|
|
|
|
|
case <-ctx.Done():
|
|
|
|
|
if !timer.Stop() {
|
|
|
|
|
<-timer.C
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
retryPeriod *= 2
|
|
|
|
|
}
|
|
|
|
|
}
|