GreenArrow Documentation

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