Retry Schedule
Before reading this page, be sure you are familiar with the differences between the ram-queue, disk-queue and bounce-queue. These are described on the GreenArrow Concepts page.
Overview
When a message is injected into GreenArrow Engine from an external source, the first delivery attempt occurs in the ram-queue.
When GreenArrow Engine internally generates a messages, such as a bounce, the first delivery attempt occurs in the bounce-queue.
If a message in either the ram-queue or bounce-queue is deferred or throttled, it gets sent to the disk queue, which uses a quadratic formula to schedule future delivery attempts.
An exception to both the ram-queue and bounce-queue behavior is deliveries to local domain names, which are not moved to the disk-queue.
The chart in the next section shows the retry schedule. Details on how this schedule is calculated and implemented can be found in the More Details section.
Chart
Delivery Attempt | Seconds | HH:MM:SS |
---|---|---|
1 | 0 | 00:00:00 |
2 | 400 | 00:06:40 |
3 | 1600 | 00:26:40 |
4 | 3600 | 01:00:00 |
5 | 6400 | 01:46:40 |
6 | 10000 | 02:46:40 |
7 | 14400 | 04:00:00 |
8 | 19600 | 05:26:40 |
9 | 25600 | 07:06:40 |
10 | 32400 | 09:00:00 |
11 | 40000 | 11:06:40 |
12 | 48400 | 13:26:40 |
13 | 57600 | 16:00:00 |
14 | 67600 | 18:46:40 |
15 | 78400 | 21:46:40 |
16 | 90000 | 24:00:00 |
17 | 102400 | 28:26:40 |
18 | 115600 | 32:06:40 |
19 | 129600 | 36:00:00 |
20 | 144400 | 40:06:40 |
21 | 160000 | 44:26:40 |
22 | 176400 | 49:00:00 |
23 | 193600 | 53:46:40 |
24 | 211600 | 58:46:40 |
25 | 230400 | 64:00:00 |
26 | 250000 | 69:26:40 |
27 | 270400 | 75:06:40 |
28 | 291600 | 81:00:00 |
29 | 313600 | 87:06:40 |
30 | 336400 | 93:26:40 |
31 | 360000 | 100:00:00 |
More Details
This chart above is not followed precisely. GreenArrow Engine’s scheduling processes introduce some additional variability in order to smooth out the retry schedule for bursts of injected messages.
The retry schedule can be expressed as the following formula, where n is the retry attempt:
((n-1)*20)²
Delivery Attempt | Formula | Seconds |
---|---|---|
1 | ((1-1)*20)² | 0 |
2 | ((2-1)*20)² | 400 |
3 | ((3-1)*20)² | 1600 |
4 | ((4-1)*20)² | 3600 |
Override
The retry schedule above can be overridden by the retry_time directive on a per-VirtualMTA or per-domain basis.
The retry schedule for each message is the first match in the following list:
-
The retry_time configured for the recipient’s domain within the VirtualMTA requested at the time of injection.
-
The retry_time configured for the recipient’s domain within the VirtualMTA that the most recent delivery attempt used.
-
The retry_time configured for the recipient’s domain within the wildcard
*
ip_address block. -
The default retry schedule.