fix(generator): усилены проверки startup-history
- Зачем: - коммит-гейт не запускал корневые контрактные тесты, а часть подтверждённых обходов могла снова смешать разные миры генератора. - Что: - добавлены цели make test, make lint и contract-test с тихим pytest-выводом через Docker. - закрыты обходы через generator-reset, неизвестную версию state и fail-open проверку DM-витрин. - усилены поведенческие контракты CHECK_LIVE_SEAM, профиля manifest и pause-check etl_pipeline; обновлены документы и issue 19. - Проверка: - make test; make lint; git diff --check.
This commit is contained in:
+11
-2
@@ -18,11 +18,19 @@
|
||||
- `make data` (архивный путь: заливает `data/*.jsonl` в Kafka; не основной источник аналитики)
|
||||
- `make transform` (запускает batch-процесс ODS -> DDS -> DM)
|
||||
- `make superset-init` (повторная инициализация Superset: подключение к ClickHouse, датасеты, дашборд)
|
||||
- `make test` (быстрый предкоммитный набор: тесты генератора, верхние
|
||||
контрактные тесты и проверка compose-конфигурации)
|
||||
- `make lint` (статические проверки: синтаксис Python и Bash, compose-конфиг,
|
||||
пробелы в diff)
|
||||
- `docker compose ps`
|
||||
- `docker compose logs -f --tail=200 <service>`
|
||||
- `docker compose down` (сохраняет named volumes, включая `clickhouse-data`)
|
||||
- `docker compose down -v` (удаляет named volumes, использовать осознанно)
|
||||
|
||||
`make test` и `make lint` не заменяют стендовые проверки, которые управляют
|
||||
volumes или live-генератором. Для стыка backfill/live отдельно запускайте
|
||||
`make generated-history-runtime-check`.
|
||||
|
||||
## Порты
|
||||
|
||||
Порты задаются в `docker-compose.yml`:
|
||||
@@ -278,8 +286,9 @@ docker compose exec -T kafka /opt/kafka/bin/kafka-console-consumer.sh \
|
||||
Live-продолжение стартует с этого state. Используйте тот же профиль или ту же
|
||||
длительность, что были у backfill. Команда сама выставит `GEN_STATE_RESET=false`.
|
||||
Если state записан старой версией генератора, запуск теперь падает громко:
|
||||
сначала очистите стенд через `make clean` и пересоздайте историю либо явно
|
||||
начните новый мир через `make generator-reset`.
|
||||
сначала очистите стенд через `make clean` и пересоздайте историю. Команда
|
||||
`make generator-reset` подходит только для осознанного нового live-мира на
|
||||
чистом стенде: она тоже проверяет, что Kafka data-топики и STG пустые.
|
||||
|
||||
```bash
|
||||
PROFILE=daily-wave make generator-continue
|
||||
|
||||
@@ -145,7 +145,7 @@ make logs service=superset # Логи сервиса
|
||||
|
||||
# ETL
|
||||
make generated-history-analytics # Чистый прогон генерации до Superset
|
||||
make generated-history-check # Проверка DM и Superset metadata
|
||||
CHECK_LIVE_SEAM=0 make generated-history-check # Проверка DM и Superset после backfill
|
||||
make ddl # Применение DDL в ClickHouse
|
||||
make data # Архивная загрузка data/*.jsonl в Kafka
|
||||
make transform # Запуск batch-процесса
|
||||
|
||||
@@ -67,7 +67,9 @@ make up
|
||||
- `generator_state` — слепок состояния генератора на правой границе стартовой истории.
|
||||
По нему live-продолжение понимает, откуда продолжать тот же мир;
|
||||
- `generator_startup_history_manifest` — паспорт стартовой истории: seed, границы
|
||||
модельного времени и контрольные числа.
|
||||
модельного времени и контрольные числа;
|
||||
- `generator_batch_history` — журнал батчей генератора: сколько сообщений он
|
||||
отправил и чем закончилась каждая пачка записи.
|
||||
|
||||
Служебные топики нужны стенду, но в упражнениях курса мы их не меняем. У каждого нашего
|
||||
топика событий в колонке с партициями стоит **1**: топик маленький, делить не на что.
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
|
||||
1. Поднимите стенд: `make up`.
|
||||
2. Если DDL ещё не применён, запустите `ddl_init`.
|
||||
3. Откройте `generator_control` и выберите `operation`.
|
||||
3. Снимите паузу с `etl_pipeline`, если он ещё paused:
|
||||
`docker compose exec -T airflow-webserver airflow dags unpause etl_pipeline`.
|
||||
4. Откройте `generator_control` и выберите `operation`.
|
||||
|
||||
Операции:
|
||||
|
||||
@@ -148,18 +150,21 @@ PROFILE=daily-wave make generator-continue
|
||||
|
||||
У `daily-wave` скорость ×60. Долгий простой стенда создаёт большую дыру в
|
||||
модельном времени: ночь простоя может стать десятками модельных суток без
|
||||
событий. Для чистой демонстрации лучше запустите `make generator-reset` или
|
||||
повторите импорт стартовой истории через `make startup-history-import`.
|
||||
событий. Для чистой демонстрации лучше очистите стенд, затем запустите
|
||||
`make generator-reset` или повторите импорт стартовой истории через
|
||||
`make startup-history-import`.
|
||||
`make generator-reset` начнёт новый live-мир только на чистом стенде; если в
|
||||
Kafka data-топиках или STG уже есть строки, команда попросит `make clean`.
|
||||
|
||||
Если читаемый state есть, но настройки не совпадают, генератор падает с перечнем
|
||||
полей. Это защита от смешения разных миров. Для намеренного нового мира
|
||||
используйте `make generator-reset` или `make clean`.
|
||||
сначала очистите стенд через `make clean`, затем запускайте нужный сценарий.
|
||||
|
||||
После обновления кода старый state может оказаться в старом формате. При
|
||||
`GEN_STATE_RESET=false` это теперь громкий отказ, а не тихий старт с нуля поверх
|
||||
старой истории. Оператору нужно выбрать одно из двух: очистить стенд через
|
||||
`make clean` и заново создать стартовую историю, либо осознанно начать новый мир
|
||||
через `GEN_STATE_RESET=true` / `make generator-reset`.
|
||||
`make clean` и заново создать стартовую историю, либо осознанно начать новый
|
||||
live-мир через `make generator-reset` на чистом стенде.
|
||||
|
||||
После нестандартного мира `make generator-continue` нужно запускать с теми же
|
||||
настройками, что были у backfill/import. При расхождении генератор громко
|
||||
|
||||
Reference in New Issue
Block a user