feat(generator): добавлено состояние версии 2 для рестартов
- Зачем: - генератор должен переживать рестарт без потери популяции пользователей и коротко прерванных активных визитов. - Что: - добавлен компактный state v2 для популяции, активных визитов и остатка бюджета рождений. - сервис генератора переведён на единый тиковый поток с сохранением и восстановлением состояния. - добавлена безопасная деградация для старого state v1 и битого state v2. - покрыты короткий и долгий простой, reset состояния и валидация вложенного state. - Проверка: - uv run --with-requirements generator/requirements.txt pytest generator/tests -q. - git diff --check.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
Status: ready-for-agent
|
||||
Status: ready-for-human
|
||||
|
||||
# Состояние версии 2 и рестарт
|
||||
|
||||
@@ -17,16 +17,16 @@ Status: ready-for-agent
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- [ ] Состояние версии 2 сериализуется в JSON и восстанавливает тик, ГПСЧ,
|
||||
- [x] Состояние версии 2 сериализуется в JSON и восстанавливает тик, ГПСЧ,
|
||||
популяцию пользователей и активные визиты.
|
||||
- [ ] Старое состояние версии 1 или битое состояние не валит генератор:
|
||||
- [x] Старое состояние версии 1 или битое состояние не валит генератор:
|
||||
фиксируется предупреждение, генератор начинает с чистого листа.
|
||||
- [ ] После простоя не больше 30 минут активный визит продолжается, а созревшие
|
||||
- [x] После простоя не больше 30 минут активный визит продолжается, а созревшие
|
||||
события досылаются со своими исходными запланированными метками времени.
|
||||
- [ ] После долгого простоя просроченный активный визит закрывается без досылки
|
||||
- [x] После долгого простоя просроченный активный визит закрывается без досылки
|
||||
остатка.
|
||||
- [ ] Популяция пользователей переживает простой любой длины.
|
||||
- [ ] `GEN_STATE_RESET=true` явно сбрасывает состояние, как и раньше.
|
||||
- [x] Популяция пользователей переживает простой любой длины.
|
||||
- [x] `GEN_STATE_RESET=true` явно сбрасывает состояние, как и раньше.
|
||||
|
||||
## Blocked by
|
||||
|
||||
@@ -40,3 +40,16 @@ Status: ready-for-agent
|
||||
Преждевременный кодовый задел state v2 был откатан, чтобы он не попал в коммиты
|
||||
следующих задач. Возвращаться к этой задаче нужно после реализации зависимостей
|
||||
и заново проверять все acceptance criteria на актуальной модели генератора.
|
||||
|
||||
2026-06-11: реализовано состояние версии 2 для `TickStreamGenerator`: в снимок
|
||||
попадают тик, ГПСЧ, компактная популяция пользователей, компактные активные
|
||||
визиты и остаток бюджета рождений визитов. `GeneratorService` теперь владеет
|
||||
одним тиковым потоком, сохраняет его снимок и восстанавливает его при старте.
|
||||
Короткий простой продолжает активные визиты и досылает созревшие события с
|
||||
исходными метками времени; долгий простой закрывает просроченные визиты без
|
||||
досылки остатка; популяция сохраняется.
|
||||
|
||||
Старое state v1 и битое v2-state деградируют в чистый старт с предупреждением;
|
||||
`GEN_STATE_RESET=true` по-прежнему пропускает загрузку состояния. Проверка:
|
||||
`uv run --with-requirements generator/requirements.txt pytest generator/tests -q`
|
||||
— 112 passed.
|
||||
|
||||
Reference in New Issue
Block a user