smtp-await-slot

Global

Ждать слот или отказывать входящему соединению сверх потолка
в конфигурации это строкаsmtp-await-slot falseвнутри блока Global
Что видит клиент, когда узел занят

Умолчание — false. Строка решает, что делать с новым входящим соединением, когда свободных слотов не осталось — то есть когда достигнут потолок total-max-smtp-in.

С умолчанием MTA отвечает приветствием 421 — служба недоступна — и закрывает соединение. С true соединение ждёт, пока слот освободится.

Строка задаёт поведение для всего узла. У отдельного приёмника есть своя, одноимённая по смыслу await-slot — она перекрывает это решение на своём адресе, и так можно развести подачу и приём входящей почты.

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

Отказ 421 честнее: он говорит «занят, приходи позже», и отправляющий сервер знает, что делать.

Вторая половина: ожидание не поднимает потолок. Соединений по-прежнему не больше, чем разрешено, — меняется только то, что видит тот, кто пришёл сверх.

Что делает Хаб. Не пишет — ни этой строки, ни её формы у приёмника. Действует вендорское умолчание: при исчерпании потолка в 1000 соединений узел отвечает 421 и закрывает соединение.

Для подачи это разумно: подаёт сам Хаб, он видит отказ сразу и переносит попытку. Для приёма жалоб и отчётов выбор менее очевиден — чужой сервер повторит по своему расписанию, а может и не повторить.

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

Что ставить. Выбор зависит от того, кто приходит:

Значение Когда
false (умолчание) подача от своей платформы, которая умеет повторить позже
true узел принимает чужую почту, и расписание повторов отправителя вам неподвластно

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

Умолчание false и ответ 421 с закрытием соединения — из руководства, § 3.3.1.32. Форма у приёмника — § 3.3.17.1. Разбивка случаев наша.
Пример в конфигурации
# общее решение узла; у приёмника его можно перекрыть своей строкой
total-max-smtp-in 1000
smtp-await-slot false
Строки читаются вместе: первая задаёт потолок, вторая — что увидит тот, кто пришёл сверх него. Ожидание потолка не поднимает.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают ожидание на приёмнике подачи

наш опыт

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

Считают строку способом поднять потолок

§ 3.3.1.32

Чем чреватоПотолок она не меняет: соединений по-прежнему не больше, чем разрешено. Меняется только то, что видит пришедший сверх.
Как заметитьСтрока включена, а число одновременных соединений не выросло.
Как правильноПоднимать сам потолок, а эту строку выбирать по тому, кто подаёт.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
smtp-await-slot <boolean>
Значения
yes | no | true | false
Умолчание
false § 3.3.1.32
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива пишется в корне файла конфигурации и задаёт поведение всего узла. Перекрыть его можно на уровне отдельного приёмника — одноимённой по смыслу строкой внутри его блока.
Как проверить на узле
Строку читают вместе с потолком; проявляется она только у него:
grep -n 'smtp-await-slot\|total-max-smtp-in\|await-slot' /etc/pmta/config
pmta show status | grep -i 'smtp-in\|inbound'
Пока число входящих соединений далеко от потолка, разницы между значениями нет никакой. Проверять поведение имеет смысл только под нагрузкой, близкой к пределу.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Подключить платформу отправки