Skip to content

OPS-5: Zero-downtime миграции (expand/contract) #98

Description

@ii-reviewer

Цель: ввести дисциплину миграций без простоя, чтобы выкатка схемы не ломала работающие инстансы старого кода во время деплоя.
Зависимость:

Что сделать

  • Продемонстрировать паттерн expand/contract на реальной новой колонке (например, items.barcode или stock_movements.reason):
    1. Vx__add_col_nullable.sql — добавить колонку nullable, без NOT NULL/дефолта, переписывающего таблицу.
    2. Backfill существующих строк (отдельная миграция или джоба, батчами).
    3. Vy__set_col_not_null.sql — навесить NOT NULL/индекс отдельной миграцией, когда весь код уже пишет колонку.
  • Зафиксировать в docs/ правила: запрет переименований/удалений/сужений типа в одном шаге, запрет блокирующих ALTER на больших таблицах.
  • Стретч: объяснить совместимость — старый и новый код одновременно работают на промежуточной схеме; показать, почему шаг 1 безопасен при rolling-деплое.

Acceptance criteria

  • Колонка добавляется тремя отдельными миграциями (nullable → backfill → NOT NULL).
  • Старый код (без знания о колонке) продолжает работать после шага 1 (нет ошибок вставки).
  • В docs/ есть чеклист «что нельзя в одной миграции» с обоснованием.
  • Все миграции проходят flyway validate, повторный старт не перезапускает их.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions