fix(api): подтвердить остановку NetFlow перед операцией с БД

This commit is contained in:
Denozordec committed 2026-10-07 22:48:19 +07:00
1 parent 1b89d56ea3
commit f8da3e08a0
14 files changed
+192 -11

No files matched your search

+11 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-07: блок 12.5.8 завершён в части scheduler lifecycle. Операции с БД закрывают новые запуски и ждут текущие jobs; таймаут отменяет команду, ручной запуск сообщает точный409. Локальные профильные проверки прошли. Изменения ещё не развёрнуты на стенде673e5ba; PG-6 остаётся открытым. Следующий 12.5.9 — graceful stop/flush NetFlow worker и проверка lifecycle перед restore.
Актуальное продолжение 2026-10-07: блок12.5.9 завершён локально — отдельный shutdown NetFlow закрывает UDP, сериализует flush, закрывает worker PG pool и требует acknowledgement плюс штатный exit. Четыре lifecycle tests, database HTTP/JWT и build прошли. На стенде остаётся source673e5ba. Следующий12.5.10 — реальные worker/UDP/длительная запись в выделенной проверочной БД и контроль остальных writers; PG-6/restore остаются открытыми.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -34,6 +34,16 @@
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в описанных границах:12.3.83,main1186/1186,context221/221. Этап остаётся в работе: стенд12.5.1–3 развёрнут,bootstrap/smoke проверены;остальные сценарии12.5 не выполнены. |
## 12.5.9 — подтверждённая остановка NetFlow worker перед операцией с БД (2026-10-07)
Добавлена отдельная IPC команда shutdown для database operation; обычный stop остальных потребителей не подменён. Worker прекращает приём datagrams, закрывает UDP socket/таймер, ждёт принудительный flush без prune и pool.end(), затем отправляет shutdown-complete и закрывает parentPort. Основной процесс требует и acknowledgement, и exit0. Timeout30сек, неподтверждённый exit и ошибки отменяют database operation без принудительного terminate. Неуспешный stop остаётся latched: попытка restart не уничтожает worker с неподтверждёнными записями и возвращает существующее listenerError предупреждение.
Flush engine сериализован общей очередью: завершающий flush не обгоняет уже выполняющуюся запись; отказ одного вызова не ломает следующий. По окончании worker дополнительно ожидается очередь main engine. Listener admission закрыт на весь database operation: обычный start во время паузы отклонён; явный restartAfterDatabaseOperation снимает паузу только после успешного stop. Асинхронный spawn проверяет паузу после чтения контекста, поздний exit старого worker не сбрасывает ссылку на новый. system-database-backup подключён к отдельной паре stop/restart.
Проверки: четыре новых pure/protocol tests прошли — ack без exit недостаточен, exit без ack/exit1/timeout отменяют операцию, final flush ждёт in-flight rejected flush, настоящий worker thread подтверждает shutdown и штатно выходит. Это worker fixture для транспорта, не настоящий UDP collector с PostgreSQL. Новый тест включён в test:system-database. Существующие7pure database tests, HTTP/JWT scripts прошли; contracts/backend build после окончательных изменений passed; diff-check passed. Тесты с очисткой БД не запускались.
PG-6 ещё открыт: тест с реальным collector/UDP и длительным SQL, конкурирующие ручные API writers, вспомогательные writers и другие экземпляры не проверены. flushPending сохраняет прежнюю best-effort обработку ошибок отдельных хранилищ: подтверждение означает завершение попыток записи/закрытие pool, а не гарантию сохранения каждого packet. Новый код пока не развёрнут, активный source673e5ba; данные стенда/RouterOS не менялись, API restore основной БД не запускался. Следующий12.5.10 — запуск текущего collector в выделенной mmapp_acceptance_20261007, наблюдение UDP/SQL drain и безопасный контроль остальных writers перед развёртыванием/PG-3/4. Локальный коммит без push.
## 12.5.8 — ожидание заданий планировщика перед операцией с БД (2026-10-07)
Исправлена первая часть обнаруженного в12.5.7 lifecycle: scheduler-running закрывает admission до ожидания всех активных jobs. Слот освобождается в существующем finally после collector и записи scheduler journal. Ожидание ограничено30сек; при таймауте pg_dump/pg_restore не запускается, исходная ошибка сохраняется, consumers проходят стандартную попытку перезапуска. Повторный запуск уже выполняющейся job по-прежнему отклонён. system-database-backup подключён к новым stopSchedulerForDatabaseOperation/restartSchedulerAfterDatabaseOperation; обычный stopScheduler для существующих потребителей сохраняет синхронный контракт.