mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-18 14:47:03 +00:00
queue: Calculate next delay based on creation time
Calculating the next delay based on the previous delay causes daemon restarts to start from scratch, as we don't persist it. This can cause a few server restarts to generate many unnecessary sends. This patch changes the next delay calculation to use the creation time instead, and also adds a <=1m random perturbation to avoid all queued emails to be retried at the exact same time after a restart.
This commit is contained in:
@@ -263,3 +263,25 @@ func TestPipes(t *testing.T) {
|
||||
t.Errorf("pipe delivery failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNextDelay(t *testing.T) {
|
||||
cases := []struct{ since, min time.Duration }{
|
||||
{10 * time.Second, 1 * time.Minute},
|
||||
{3 * time.Minute, 5 * time.Minute},
|
||||
{7 * time.Minute, 10 * time.Minute},
|
||||
{15 * time.Minute, 20 * time.Minute},
|
||||
{30 * time.Minute, 20 * time.Minute},
|
||||
}
|
||||
for _, c := range cases {
|
||||
// Repeat each case a few times to exercise the perturbation a bit.
|
||||
for i := 0; i < 10; i++ {
|
||||
delay := nextDelay(time.Now().Add(-c.since))
|
||||
|
||||
max := c.min + 1*time.Minute
|
||||
if delay < c.min || delay > max {
|
||||
t.Errorf("since:%v expected [%v, %v], got %v",
|
||||
c.since, c.min, max, delay)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user