func nTriesWithExponentialBackoff(nTries int64, timeBaseUnit time.Duration, fn func() error) (err error) {
	for i := int64(0); i < nTries; i++ {
		err = fn()
		if err == nil {
			return nil
		}
		jitter := time.Duration(randSrc.Float64()*100) * time.Microsecond
		ts := jitter + ((1 << uint64(i)) * timeBaseUnit)
		<-time.After(ts)
	}
	return err
}
retries function fn upto n times, if fn returns an error lest it returns nil early.
It applies exponential backoff in units of (1<<n) + jitter microsends.
package ocagent
import (
	"math/rand"
	"time"
)
var randSrc = rand.New(rand.NewSource(time.Now().UnixNano()))