- Зачем:
- генерация с нуля занимала часы, boarding_passes были пустыми, данные
пропадали после docker compose down/up.
- Что:
- обновлён demodb до коммита 866e56f, добавлен патч install_connstr_no_hardcode.
- BOOKINGS_INIT_DAYS увеличен до 60, BOOKINGS_JOBS по умолчанию 2.
- добавлен seed-дамп bookings/seed/demo.sql.xz (42 MB, xz вместо 7z).
- make bookings-init восстанавливает из дампа (~18 сек) и применяет GUC из .env.
- make bookings-generate — генерация с нуля для разработчиков.
- generate_next_day.sql: COMMIT после continue(), pg_sleep(3) для jobs>1, synchronous_commit=on + CHECKPOINT.
- bookings-check-jobs: добавлена валидация нечисловых значений BOOKINGS_JOBS.
- bookings-init теперь вызывает bookings-check-jobs как prerequisite.
- синхронизированы внутренние документы (коммит demodb, init_days=60).
- Проверка:
- make bookings-init && make bookings-generate-day BOOKINGS_JOBS=2.
- make test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Временное ТЗ по блоку bookings (для текущей разработки)
Внутренний файл для наставника: поясняет, как устроен источник bookings-db и генерация данных. Студентам обычно не нужен.
- Контейнер
bookings-db— отдельный сервис Postgres изdocker-compose.yml, база по умолчаниюdemo(из upstream demodb), без переименований. - Доступ снаружи не блокируем (порт
5434по умолчанию), чтобы позже читать через PXF и подключаться из Greenplum. - Инициализация: два способа:
make bookings-init(рекомендуется): быстрое восстановление из seed-дампа (~18 сек).make bookings-generate(для разработчиков): полная генерация с нуля — клонирует demodb с закреплённым коммитом, накладывает патчи (engine:jobs=1синхронно +busy()игнорирует свой pid;install.sql:DROP DATABASE IF EXISTS,connstrбез хардкода), ждётpg_isready, ставитgen.connstrи GUCbookings.start_date/init_days/jobs, затем запускает/bookings/generate_next_day.sqlчерезpsql -f. Значения по умолчанию: стартовая дата 2017-01-01,init_days=60,jobs=2.
- Генерация следующего дня:
make bookings-generate-dayпрогоняет тот же SQL (читает GUC, вызываетgenerate/continue, ждётbusy(), закрывает dblink). Приjobs=1всё синхронно, без dblink. - Исходники demodb: клонируем по требованию с фиксированным хешем, кладём в
bookings/demodb/(в.gitignore), патчи лежат вbookings/patches/и применяются автоматически приmake bookings-generate. - Документация: в README описаны команды (
bookings-init,bookings-generate, проверка данных, генерация дня), параметры.env; настройка PXF/ETL — следующий этап.
Текущее состояние
make bookings-init— быстрое восстановление из seed-дампа (~18 сек), рекомендуется для студентов.make bookings-generate— полная генерация с нуля: автоматически применяет патчи (engine_jobs1_sync.patch,install_drop_if_exists.patch), ждёт готовности Postgres черезpg_isready, запускаетinstall.sql, выставляетgen.connstr/GUC и вызываетgenerate_next_day.sqlчерезpsql -f.- Дефолты:
BOOKINGS_START_DATE=2017-01-01,BOOKINGS_INIT_DAYS=60,BOOKINGS_JOBS=2. Приjobs=1генерация идёт синхронно без dblink,busy()не учитывает текущую сессию. .env.example/README обновлены под новые дефолты; каталогbookings/demodb/в.gitignore.- Патчи лежат в
bookings/patches/и накладываются приbookings-clone-demodb.
Текущее состояние тестов/проблем
- Чистый прогон
make bookings-init(восстановление из seed-дампа) проходит за ~18 секунд. - Чистый прогон
make bookings-generate(послеdocker compose down -vи удаленияbookings/demodb) проходит за ~1,5 минуты: база ставится,busy()→f,bookings.bookingsот2017-01-01 00:00:18до2017-01-01 23:59:59. - Ранее зависание на
busy()приjobs=1лечится патчем:process_queueтеперь синхронный, аbusy()игнорирует текущий backend. - Данных пока только на 1 день по умолчанию, чтобы генерация не занимала много времени.
Идеи/следующие шаги
- Если понадобится больше дней — увеличивать
BOOKINGS_INIT_DAYS, но помнить, что генерация может идти долго; контролировать черезSELECT busy();. - Следующий этап — PXF/ETL в Greenplum; текущая задача — лишь подготовить источник bookings.