in exponential/policy.go [184:231]
func (p Policy) timeTable() TimeTable {
tt := TimeTable{
Entries: []TimeTableEntry{
{
Attempt: 1,
Interval: 0,
MinInterval: 0,
MaxInterval: 0,
},
},
}
interval := p.InitialInterval
var i int
for i = 2; interval != p.MaxInterval; 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
}
}
// This is the final entry at the maximum interval.
entry := TimeTableEntry{
Attempt: i,
Interval: interval,
MinInterval: interval - time.Duration(float64(interval)*p.RandomizationFactor),
MaxInterval: interval + time.Duration(float64(interval)*p.RandomizationFactor),
}
tt.MinTime += entry.MinInterval
tt.MaxTime += entry.MaxInterval
tt.Entries = append(tt.Entries, entry)
return tt
}