[P2] Миграции tradein: порядок (до рестарта) + реконсиляция 152 vs 131 + дубль-префиксы #2216

Closed
opened 2026-07-02 19:19:14 +00:00 by lekss361 · 1 comment
Owner

Эпик: #2200

Находки (Backend/DB, Medium, verified):

  • Миграции применяются ПОСЛЕ рестарта app-контейнеров: deploy-tradein.yml:320 up -d ПЕРЕД циклом :369-387; при сбое миграции новый код бесконечно на старой схеме (500/тихо-неверно). deploy.md утверждает обратный порядок (верно для main, ложно для tradein).
  • История схемы нереспроизводима: прод _schema_migrations=152 vs ls data/sql=131 файл (21 переименована/удалена); трекинг по bare-filename → переименование применённого файла ре-выполнит его на деплое.
  • 6 дубль-префиксов (084/108/113/121/124/130) → неоднозначный порядок для людей.

Acceptance:

  • Миграции применяются ДО up -d новых контейнеров (или с rollback-веткой на сбое).
  • Реконсилировать 152 vs 131 (задокументировать/восстановить недостающие имена; убедиться, что fresh-bootstrap = прод-lineage).
  • Разрулить дубль-префиксы; закрепить, что переименование применённой миграции запрещено.

Scope: .forgejo/workflows/deploy-tradein.yml, tradein-mvp/backend/data/sql/.

Эпик: #2200 **Находки (Backend/DB, Medium, verified):** - Миграции применяются ПОСЛЕ рестарта app-контейнеров: `deploy-tradein.yml:320 up -d` ПЕРЕД циклом `:369-387`; при сбое миграции новый код бесконечно на старой схеме (500/тихо-неверно). `deploy.md` утверждает обратный порядок (верно для main, ложно для tradein). - История схемы нереспроизводима: прод `_schema_migrations`=152 vs `ls data/sql`=131 файл (21 переименована/удалена); трекинг по bare-filename → переименование применённого файла ре-выполнит его на деплое. - 6 дубль-префиксов (084/108/113/121/124/130) → неоднозначный порядок для людей. **Acceptance:** - [ ] Миграции применяются ДО `up -d` новых контейнеров (или с rollback-веткой на сбое). - [ ] Реконсилировать 152 vs 131 (задокументировать/восстановить недостающие имена; убедиться, что fresh-bootstrap = прод-lineage). - [ ] Разрулить дубль-префиксы; закрепить, что переименование применённой миграции запрещено. Scope: `.forgejo/workflows/deploy-tradein.yml`, `tradein-mvp/backend/data/sql/`.
lekss361 added the
priority/p2
scope/db
scope/devops
tech-debt
tradein
labels 2026-07-02 19:20:27 +00:00
Author
Owner

Сделано в PR #2228 (смержен; первый деплой с новым порядком прошёл success, health 200).

Acceptance:

  • Миграции ДО up -d новых контейнеров: pull → up только postgres → pg_isready-цикл (30×2s, fail=exit 1) → блок миграций → up app-контейнеров. Сбой миграции = exit 1 до нового кода (старые контейнеры остаются на консистентной паре код↔схема). docker restart tradein-backend стал не нужен и удалён.
  • Реконсиляция 152 vs 131 — не актуальна: прод _schema_migrations и репо data/sql полностью совпадают (154 == 154, diff пуст, проверено на проде 2026-07-02; аудит снят со стейл-ветки).
  • Дубль-префиксы + запрет переименования: _manifest_applied.txt + test_migrations_manifest.py (pre-merge CI): red при rename/rm применённой миграции и при новом дубль-NN; 6 исторических дублей (084/108/113/121/124/130) grandfathered. Переименовывать их НЕЛЬЗЯ (tracking по bare-filename → повторное выполнение на проде) — теперь это машинно-запрещено, а не только договорённость.

Minor из ревью (health-check не валит job при мёртвом backend — pre-existing) закрывается в #2214.

Сделано в PR #2228 (смержен; первый деплой с новым порядком прошёл success, health 200). Acceptance: - ✅ **Миграции ДО `up -d` новых контейнеров:** pull → up только postgres → pg_isready-цикл (30×2s, fail=exit 1) → блок миграций → up app-контейнеров. Сбой миграции = exit 1 до нового кода (старые контейнеры остаются на консистентной паре код↔схема). `docker restart tradein-backend` стал не нужен и удалён. - ✅ **Реконсиляция 152 vs 131 — не актуальна:** прод `_schema_migrations` и репо `data/sql` полностью совпадают (154 == 154, diff пуст, проверено на проде 2026-07-02; аудит снят со стейл-ветки). - ✅ **Дубль-префиксы + запрет переименования:** `_manifest_applied.txt` + `test_migrations_manifest.py` (pre-merge CI): red при rename/rm применённой миграции и при новом дубль-NN; 6 исторических дублей (084/108/113/121/124/130) grandfathered. Переименовывать их НЕЛЬЗЯ (tracking по bare-filename → повторное выполнение на проде) — теперь это машинно-запрещено, а не только договорённость. Minor из ревью (health-check не валит job при мёртвом backend — pre-existing) закрывается в #2214.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2216
No description provided.