Continous integration / Tests (push) Canceled after 0s
Testing clients / Build beanstalkd (push) Canceled after 0s
Continous integration / Docker build (push) Canceled after 0s
Testing clients / Test Pheanstalk PHP (push) Canceled after 0s
Testing clients / Test Greenstalk Python (3.9) (push) Canceled after 0s
Testing clients / Test Pystalk Python (3.10) (push) Canceled after 0s
6.2 KiB
6.2 KiB
06. Supervisor И Эксплуатация
Статус: не начат. Зависимости: 02, 03; итоговая интеграция 04, 05.
Цель
Сделать многопроцессный сервер управляемым сервисом с единой конфигурацией, предсказуемым запуском и корректной реакцией на сбои.
Задачи
- Ввести supervisor, запускающий owners/frontend с явно заданными ролями, slot IDs, generations и топологией.
- Обеспечить один активный процесс на slot. Перед заменой подтвердить завершение прежнего процесса; PID reuse не является подтверждением его идентичности.
- Организовать startup barrier: проверка config, locks и топологии, восстановление WAL, IPC handshake, готовность к клиентским операциям.
- Корректно закрывать лишние унаследованные listening/client/IPC/WAL descriptors. Не наследовать живые jobs/сессии через fork как способ совместного владения данными.
- Интегрировать выбранные CLI/config,
-u, TCP/Unix sockets и socket activation. Проверить границы привилегий и права на IPC/data root. - Реализовать согласованную обработку
SIGUSR1drain и остановки. Drain прекращает новыеputво всём логическом сервере, но не означает остановку выдачи существующих jobs. - Ввести restart policy с ограничением частоты/числа попыток и диагностикой. Во время недоступности slot его имена не передаются другим owners.
- Определить поведение при смерти supervisor: оставшиеся процессы не продолжают принимать изменения без действующей управляющей эпохи; исключить запуск второго независимого сервера поверх тех же slots.
- Обеспечить логи с role/slot/generation и метрики IPC backlog, restart count, owner readiness, загрузки и WAL ошибок.
- Обновить эксплуатационную документацию: запуск, проверки готовности, restart, drain, резервное копирование/восстановление при остановленном сервере, запрет несогласованного изменения карты.
Матрица Отказов
| Событие | Требуемое свойство |
|---|---|
| Смерть frontend | Владельцы освобождают ссылки/ожидания/резервации всех его сессий; старое поколение больше не принимается |
| Смерть owner | Затронутые сессии обрабатываются по контракту 01; очистка связанных сессий у остальных owners; перезапуск только того же slot |
| Разрыв IPC | Неизвестные результаты не повторяются автоматически; endpoint/session fencing исключает поздние изменения |
| Смерть supervisor | Нет бесконтрольных orphan writers и двух поколений активного сервера |
| Ошибка WAL | Явная диагностика и согласованная политика отказа; не тихое переключение на другой owner |
SIGUSR1 |
Глобально согласованный drain, включая owners/frontend, перезапущенные во время drain |
| Остановка | Нет новых принятых операций после согласованного барьера; bounded shutdown, явная политика незавершённых ответов |
Приёмка
- Запускаются один и несколько owners/frontend с одинаковой картой; ошибочная конфигурация не оставляет работающих дочерних процессов и занятых sockets.
- Попытка второго владельца slot отвергается как с WAL, так и без WAL.
- Kill/restart владельца сохраняет маршруты остальных tubes и не создаёт дубль упавшего slot.
- Затронутые клиенты получают документированный отказ/закрытие, а не
NOT_FOUNDиз-за отсутствующего процесса. - После перезапуска во время drain новый процесс не принимает
putдо снятия/завершения drain по контракту. - Проверены supervisor/frontend/owner crashes, частичный startup failure, сигналы и отсутствие утечек FD/zombie-процессов.
- Запуск и платформы соответствуют выбранной в 01 политике перехода. Если legacy сохраняется, его startup и поддерживаемые платформы не регрессируют; неподдерживаемая платформа нового режима выдаёт явный отказ сборки/запуска.
- Обновлены руководство и примеры запуска; статусы/метрики позволяют определить недоступный slot без анализа PID по догадкам.
Точки Кода
main.c, serv.c, net.c, util.c, платформенные event backends, Makefile, doc/beanstalkd.ronn, README.md, testserv.c.