Defragmentation channel message retention time

From Messaging Server Technical Reference Wiki
Jump to: navigation, search

Messages are retained in the defragment channel queue only for a limited time. When one half of the time before the first nondelivery notice is sent has elapsed1 (and a backoff time has elapsed so that the channel is attempting to process relevant message fragments), the various parts of a message will be sent on without being reassembled. This choice of time value (normally) eliminates the possibility of a nondelivery notification being sent about a message in the defragment channel queue.

The notices channel option (and optionally its priority-sensitive variants, *notices) controls the amount of time that can elapse before nondelivery notifications are sent, while the backoff channel option (and optionally its priority-sensitive variants, *backoff) controls when message delivery attempts are made. So between the two of them, they control the amount of time messages are retained before being sent on in pieces, with notices normally being the primary control (controlling how long before the channel "gives us" on attempting to reassemble message fragments), modulated by when the backoff values in fact cause the channel to run and attempt message delivery (hence deliver message fragments that have lingered past half the final notices value and still do not make up a complete message "as is", without reassembly). Set the notices option value to twice the amount of time you wish to retain messages for possible defragmentation (and ensure that the backoff values in effect for the defragment channel are such that a delivery attempt will be made shortly after half the final notices value). For example, normally a notices value of 4 would cause retention of message fragments for two days:

defragment notices 4 

Or if the more general backoff values do not align well with the defragment channel's notices time scale, then also set some sensible backoff values explicitly on the defragment channel. For instance, setting the final backoff value to p4h means that message (fragments) will get a reassembly-and-possible-delivery attempt every four hours. Hence the following sort of definition:

defragment backoff "p1h" "p2h" "p2h" "p4h" notices 4 

will mean that message fragments will get sent on as is (still as fragments, rather than reassembled) after approximately forty-nine hours. (There will be message delivery attempts immediately, then at one hour, three hours, five hours, nine hours, then every four hours thereafter---so the first time past the two day point, the expiration of half of the notices final value, will be at forty-nine hours.)

When the defragment channel cannot reassemble a message, and decides to send onwards a message fragment, it will add a header line

Defragment-failed: official-local-host-name

showing the official_host_name from the L channel.

1Note that the "half" is calculated using integer integral division but not allowed to go below one, so for instance an initial notices value of 5 results in fragments being eligible for delivery after 2 days or hours depending upon return_units, but even an initial notices value of 1 still means fragments aren't eligible for delivery until after 1 day or hour.

See also: