Files
ipam_control/docs/changes/021-concurrency-locks/SUMMARY.md
T

10 lines
1.5 KiB
Markdown
Raw Normal View History

# Итог: гонки при изменении администраторов и регистр логина (изменение 021)
## Что сделано
- `app/api/v1/users.py`: `pg_advisory_xact_lock(703002)` до чтения пользователя и подсчёта администраторов — в `update_user` (если меняются роль или доступ) и в `delete_user`: проверка «последний администратор» и изменение выполняются под блокировкой.
- Миграция `0008`: уникальный индекс `lower(username)` (перед созданием проверка дублей с остановкой и перечнем); `app/models.py`: `Index("uq_users_lower_username", …)`.
- `README.md`: раздел «Пользователи и роли».
## Проверка
Проверка: стенд `ipam_control_006` пересобран, миграции применены до 0008 (`alembic check` — расхождений нет); ручная проверка (скрипт во временной папке, в репозиторий не добавлялся); автотесты по условию этапа не писались. Логин `SMOKE-U` при существующем `smoke-u` → 409; миграция на стенде прошла.
Не проверено: параллельное отключение двух администраторов.