allow-priority-interruption

<domain>

Можно ли прервать соединения этой очереди ради более приоритетной
в конфигурации это строкаallow-priority-interruption yesвнутри блока <domain>
Щит для очереди, которую нельзя трогать

Умолчание — yes. Строка решает, можно ли отбирать соединения у этой очереди в пользу очереди с бо́льшим приоритетом.

Со значением no очередь становится неприкосновенной. Механизм приоритетов на неё не действует: как бы высоко ни стоял сосед, её соединения останутся при ней.

Это не приоритет, а исключение из правил приоритета. Число задаёт queue-priority, а эта строка решает, применимо ли к очереди само правило прерывания.

Главная ловушка — щит можно поставить всем. Строка выглядит безобидной защитой одной очереди, но правило приоритетов работает только тогда, когда есть у кого отбирать. Поставив запрет в общем блоке получателей, вы выключаете приоритеты целиком — при том что числа в конфигурации остаются и выглядят действующими.

Вторая половина: неприкосновенная очередь к медленному приёмнику держит соединения долго. Если она же и самая загруженная, остальным не достанется ничего — и никакого признака у этого нет, кроме растущих очередей соседей.

Что делает Хаб. Не пишет — остаётся вендорское yes, то есть прерывать можно любую очередь.

Приоритеты Хаб и не задаёт: все очереди равны, и отбирать соединения одной у другой MTA незачем — правило срабатывает только при разнице приоритетов.

Рекомендуемые значения

Что ставить. Запрет ставят точечно и по делу:

Значение Когда
yes (умолчание) обычная очередь: пусть работает общее правило
no направление, обрыв соединения к которому дорого стоит — приёмник считает разрыв за ошибку или долго переподключается

Второе стоит проверять по журналу приёмника, а не по ощущению: большинству приёмников разрыв соединения безразличен.

Умолчание yes и назначение «не допускать прерывания более приоритетными очередями» — из руководства, § 3.3.10.12. Разбор про запрет в общем блоке наш.
Пример в конфигурации
# приёмник, которому обрыв соединения дорого обходится
<domain slow-receiver.example>
    allow-priority-interruption no</domain>
Соединения этой очереди не отберут ни при каком приоритете соседей. Числа приоритетов на неё просто не действуют.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается2 ошибки▶

Ставят запрет в общем блоке получателей

наш опыт

Чем чреватоМеханизм приоритетов выключается целиком: отбирать соединения не у кого. Числа приоритетов остаются в конфигурации и выглядят действующими.
Как заметитьПриоритеты заданы, порядок обслуживания очередей не меняется даже под нагрузкой.
Как правильноСтавить запрет только тем очередям, которым он действительно нужен.

Защищают щитом загруженную очередь к медленному приёмнику

§ 3.3.10.12

Чем чреватоНеприкосновенная очередь держит соединения долго, и остальным не достаётся ничего. Признака у этого нет, кроме растущих очередей соседей.
Как заметитьОдна очередь занимает почти все соединения, остальные растут.
Как правильноСнять запрет и ограничить эту очередь пределами соединений, а не защищать от прерывания.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
allow-priority-interruption <boolean>
Значения
yes | no | true | false
Умолчание
yes § 3.3.10.12
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <domain> и подчиняется слиянию блоков получателей: более узкий блок перекрывает более широкий. Запрет в блоке * достаётся всем получателям сразу — и выключает механизм приоритетов целиком, оставив сами числа в конфигурации.
Как проверить на узле
Строку читают вместе с приоритетами: порознь ни одна не объясняет поведения:
grep -n 'allow-priority-interruption\|queue-priority' /etc/pmta/config /etc/pmta/virtualhost.txt
pmta show queues --connected=yes --maxitems=20
Если запрет стоит в общем блоке, приоритеты не действуют ни у кого. Проверять надо под нагрузкой: без нехватки соединений прерывать всё равно нечего.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Разобрать зависшую очередь