in exponential/policy.go [142:180]
func (p Policy) timeTableWithAttempts(attempts int) TimeTable {
if attempts < 0 {
panic("BUG: attempts must be >= 0")
}
tt := TimeTable{
Entries: []TimeTableEntry{
{
Attempt: 1,
Interval: 0,
MinInterval: 0,
MaxInterval: 0,
},
},
}
interval := p.InitialInterval
for i := 2; i <= attempts; i++ {
minInterval := interval - time.Duration(float64(interval)*p.RandomizationFactor)
maxInterval := interval + time.Duration(float64(interval)*p.RandomizationFactor)
entry := TimeTableEntry{
Attempt: i,
Interval: interval,
MinInterval: minInterval,
MaxInterval: maxInterval,
}
tt.MinTime += minInterval
tt.MaxTime += maxInterval
tt.Entries = append(tt.Entries, entry)
interval = time.Duration(float64(interval) * p.Multiplier)
if interval > p.MaxInterval {
interval = p.MaxInterval
}
}
return tt
}