func()

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
}