Избегайте отравления транзакциями DDL и затвердевайте многоподовые гонки

FixSecurityService
Shipped
20 апреля 2026 г. в 20:43 UTC
Author
Kamo
Commit
d3249b4

Предыдущее самовосстановление поместило DDL в @Transactional syncAll(). Когда альтер TABLE ADD CONSTRAINT выстрелил по существующему ограничению (обычный случай после первого) Ботинок, или проигравший струн в многостручковой гонке, RunIdempotent проглотил Java Исключение — но окружающая DB транзакция осталась в прерванном состоянии. Каждый последующий вызов JPA затем нажимает «текущая транзакция прерывается», команды Игнорировал до конца блока транзакций, снимая капсулу на каждом перезапуске. Изменения: SyncAll() больше не является @Transactional. Каждый этап проходит со своим автономия: DDL автоматически подтверждается за пределами любого Spring TX, поэтому Неудача одного заявления ничего не может отравить. - Убедитесь, что UniqueConstraint() теперь проверяет pg constraint перед попыткой ADD, Таким образом, ошибка «уже существует» никогда не срабатывает при нормальном перезапуске. - Самоинъекция (@Lazy self), так что субметоды @Transactional на самом деле Огни через весенний прокси (предыдущий звонок на этот.syncOrgRoleRights). в обход АОП. - Задокументированный анализ гонки с одновременным модированием: DDL, сериализованный CRDB, DELETEs idempotent, вставки гоночно-безопасные через ON CONFLICT ничего не делают.

All changes

Как вы видите судоходство?

Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.

Начните бесплатно навсегдаПосмотреть цены