Repository navigation
3.81
Клиенты за CDN больше не остаются без лимита после обновления.
Заголовок PROXY приходит один раз, в первых байтах соединения, и повторно не приходит никогда. Из него шейпер узнаёт настоящий адрес клиента за CDN и держит привязку в памяти ядра. Обновление перезапускает службу, а остановка и запуск — это два разных процесса: карта привязок сносилась раньше, чем её успевал кто-нибудь снять. Живые соединения через CDN после этого шли без ограничения вовсе, часами — до тех пор, пока клиент сам не переподключится.
Хуже отказа была его незаметность: в журнале при таком обновлении не появлялось ни одной строки про привязки.
Теперь при остановке карта сбрасывается в /run/shaper/pp_conn.json, а при запуске возвращается обратно. Каталог /run выбран намеренно: он переживает перезапуск службы и исчезает при перезагрузке машины — а после перезагрузки восстанавливать уже нечего, соединений всё равно нет. Дамп старше двух минут не берётся: за долгий простой порт релея достанется другому клиенту, и возвращённая привязка приписала бы ему чужой трафик.
Проверено на ноде за CDN настоящим перезапуском службы: до него 759 привязок, восстановлено 755. На том же пути до правки оставалось ноль.
Про привязки теперь всегда есть строка в журнале — «восстановлены: N» либо «не нашлось». Молчание было опаснее самой потери: отличить работающее сохранение от сломанного было нечем.
При обновлении настройки и файлы состояния не меняются. Уже это обновление пройдёт с сохранением привязок: новый engine.sh встаёт на место до того, как служба перезапустится.