Knowledge base

PMTA knowledge base›Block <domain>›Directive§ 3.3.10.43

backoff-max-msg-per-hour

<domain>deprecated

Backoff mode rate — an obsolete form with a hard-wired hour
in the configuration this is a linebackoff-max-msg-per-hourinside the block <domain>
The same replacement, but with an unobvious default

The line limited the rate of messages to the receiver in backoff mode — the mode a queue enters after a run of refusals. The manual gave it a one-sentence section: “obsolete, use backoff-max-msg-rate”.

The replacement is arranged the same way as in normal mode: the interval moved into the value, 100/h instead of a hard-wired hour. And it counts the same thing — attempts on a par with deliveries; when the limit triggers, the monitor marks it with the line message rate limit reached (based on backoff-max-msg-rate in configuration).

But the replacement’s default is unusual. If max-msg-rate is set for the same queue, the backoff limit by default equals it; if not — unlimited. That is, without an explicit line backoff mode is not slower than normal: it changes the retry schedule, but not the rate.

The conversion is mechanical: backoff-max-msg-per-hour N becomes backoff-max-msg-rate N/h.

The main trap is expecting backoff mode to slow sending down by itself. It will not. As long as there is no backoff limit, the engine takes the normal rate for it; the queue switches to a different retry schedule, while the speed stays the same. That is why the line for a receiver that has started refusing is set explicitly — and noticeably lower than the normal one.
What the Hub does. It does not write the obsolete name. It writes the replacement — backoff-max-msg-rate in the receiver block inside the sending address, from the node’s preset: in “Careful” one message an hour to a receiver that has started refusing, in “Balanced” five, in “Aggressive” twenty. The reserve address gets the same number as its ordinary max-msg-rate: queues that have already entered backoff mode go there.

The number is deliberately low: backoff mode for us means “almost stop and wait”, not “slow down a little”.

Recommended values

What to set. Nothing: the line should be replaced.

Value When
do not write it always: the backoff rate is set by the replacement
N only in an old configuration that has not been converted yet

When converting, it is worth rereading the number. Since the line is being touched anyway, it makes sense to check it against the normal rate: a backoff limit equal to the normal one gives nothing — and that is exactly how the queue will behave if the line is simply removed.

The obsolescence note and the replacement’s name come from the manual, § 3.3.10.43. The default rule “equals max-msg-rate, otherwise unlimited” comes from the replacement’s section § 3.3.10.41. The advice to reread the number is ours.
Example configuration
# this is how it used to be written
<domain yahoo.com>
    backoff-max-msg-per-hour 100</domain>

# this is how it is written now — next to the normal rate it is counted from
<domain yahoo.com>
    max-msg-rate 500/h
    backoff-max-msg-rate 100/h
</domain>
The bottom line in the second example cannot be removed without consequences: without it the backoff limit will equal the normal one, that is, five hundred messages an hour.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends3 mistakes▶

Removing the line, considering backoff mode slow enough already

§ 3.3.10.41

What it costsWithout its own line the backoff limit equals the normal rate. The queue enters backoff mode, changes its retry schedule — and keeps pushing at the receiver at the same speed, exactly when it asked to slow down.
How to spot itThe queue is in backoff mode, but the rate to the receiver has not changed; refusals continue at the same frequency.
How to do it rightSet the backoff limit explicitly and noticeably lower than the normal one. Check by the queue settings output: the two values being equal means there is no line of its own.

Converting only the normal rate and forgetting the backoff one

§ 3.3.10.43

What it costsBoth obsolete forms sit next to each other in the file, and usually the upper one is converted. The remaining backoff line looks like a setting, but whether it applies next to the new name the manual does not specify.
How to spot itIn the configuration one name is new, the other old; backoff mode behavior does not match expectations.
How to do it rightConvert the pair as a whole. Search for both obsolete names in one search — they always occur together.

Setting the backoff limit higher than the normal one

§ 3.3.10.41

What it costsThe mode exists to reduce the load on a receiver that refuses. A limit higher than normal speeds the queue up exactly when it needs to be held back, and turns backoff mode into its opposite.
How to spot itAfter entering backoff mode the refusal share grows rather than falls.
How to do it rightKeep the backoff value lower than the normal one — in the Hub’s presets it is 1/h against 2/m, 5/h against 10/m and 20/h against 30/m. Check the pair after every rate edit.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
backoff-max-msg-per-hour <rate>
Values
a number of messages per hour; the manual gives no full grammar for this name
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
<domain>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
Merging across matching <domain> blocks from general to specific, as with all receiver settings. The replacement’s inheritance is the same, but a dependency on a neighbor is added: in the absence of its own line the value is taken from max-msg-rate of the same queue.
How to check on the node
All three lines have to be looked at at once — the obsolete one, the replacement and the normal rate the replacement is counted from:
grep -rn 'backoff-max-msg-per-hour\|backoff-max-msg-rate\|max-msg-rate' /etc/pmta/
pmta show settings yahoo.com/mta-news-1
In the queue settings output the backoff-max-msg-rate line is always printed — even when it is not in the file. If it equals max-msg-rate, there is no line of its own and backoff mode does not slow sending down.
In the Hub
Cost of a mistake
safe: a wrong value breaks nothing
Scenarios
Configuration lifecycle