fix(api): дождаться заданий планировщика перед операцией с БД

This commit is contained in:
Denozordec committed 2026-10-07 22:41:50 +07:00
1 parent 6720ad3539
commit 1b89d56ea3
13 files changed
+175 -12

No files matched your search

+11 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-07: блок 12.5.7 завершён. Реальные PG-2 (backup и проверочное восстановление отдельной БД) и PG-5 (backup/restore конфликт 409) проверены; PG-7 подтверждён в границах HTTP RBAC. Следующий 12.5.8 — завершение текущих jobs/flush перед restore и проверка PG-6. Вся 12.5 остаётся открытой.
Актуальное продолжение 2026-10-07: блок 12.5.8 завершён в части scheduler lifecycle. Операции с БД закрывают новые запуски и ждут текущие jobs; таймаут отменяет команду, ручной запуск сообщает точный409. Локальные профильные проверки прошли. Изменения ещё не развёрнуты на стенде673e5ba; PG-6 остаётся открытым. Следующий 12.5.9 — graceful stop/flush NetFlow worker и проверка lifecycle перед 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.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 для существующих потребителей сохраняет синхронный контракт.
Новые ручные запуски во время паузы получают409 «Планировщик приостановлен для операции с базой», вместо неверного «Задача уже выполняется». Alert collector hooks не планируют/не запускают новые jobs во время паузы; уже ожидающий hook проверяет паузу перед runner. RefreshScheduler защищён поколением: stop или более новый refresh отменяет продолжение старого после каждого await чтения настроек. Refresh в период database pause не создаёт интервалы; штатный restart прочитает актуальные настройки.
Изменены scheduler-running.ts, scheduler.ts, alert-collector-hooks.ts, system-database-backup.ts и scheduler route; новый lifecycle test включён в test:scheduler. Проверки: test:scheduler17/17 (3lifecycle,9recorded-run,5HTTP), test:system-database (7pure tests и HTTP/JWT scripts) passed; contracts/backend build passed. Проверены два одновременно активных jobs/отказ нового запуска, сохранение паузы до завершения, timeout с нулём вызовов database command, recovery, queued alert hook и HTTP409 с настоящим manual runner. Эти проверки не требуют native RouterOS apply или очистки тестовой БД.
Это локальный кодовый блок, не завершение PG-6. NetFlow ещё использует fire-and-forget flush/terminate; прочие ручные API writers и другие экземпляры не охвачены scheduler gate. Активный Docker source остаётся673e5ba, новый код пока не развёрнут. Восстановление основной тестовой БД не запускалось; данные/CHR/серверный auth режим не менялись. Следующий 12.5.9 — graceful stop с подтверждением завершения worker flush и выхода worker, затем сборка/развёртывание и наблюдаемая PG-6 приёмка. Локальный коммит без push.
## 12.5.7 — реальный архив PostgreSQL, права и конкуренция операций (2026-10-07)
Стенд 161.104.46.222, source 673e5ba, PostgreSQL/server и pg_restore/client 18.6. [Очищенный отчёт](ux-ui/acceptance/pg-backup-auth-2026-10-07.json). Для проверки прав временно включён AUTH_REQUIRED=true; JWT с тестовым issuer сформированы только в памяти контейнера. Восемь запросов backup/restore: anonymous и wrong issuer → 401, settings writer и wrong app → 403. Admin mm:settings:admin получил backup HTTP200, 475225 байт, PGDMP, SHA256 a6b66402b28bdb146cae9712c384979aa1c1000fee19cbc97c0ec045b673c002, outcome {} без предупреждений. Настоящий Portal SSO и отсутствие процессов при отказах отдельно не инструментированы: PG-7 принят только в границах HTTP RBAC.