# Автоназначение адреса с учётом вложенных префиксов (изменение 020) Находка ревью № 10 (и часть № 11 — блокировка), серьёзность — низкая. Зависит от № 011. ## Context `next_free` (`app/services.py`) исключает только адреса самого пула: если внутри пула есть дочерний префикс, выданный адрес может попасть в его диапазон. Функция перебирает хосты подряд и загружает все занятые адреса в множество. `allocate_next` не блокирует префикс: при параллельных запросах один получает 409 «повторите». ## Решение 1. `next_free_address(net, occupied)` — по образцу `next_free_subnet` (перескок за занятые диапазоны, без перебора): занятыми считаются адреса пула, диапазоны дочерних префиксов того же VRF и (для IPv4 ≤ /30) адрес сети и broadcast. 2. `allocate_next`: `SELECT … FOR UPDATE` строки префикса (как в `allocate_subnet`) — параллельные запросы сериализуются и получают разные адреса. 3. Старую `next_free` удалить. ## Файлы `app/services.py`, `app/api/v1/prefixes.py`, `tests/test_api.py`, `README.md` (автоназначение). ## Тест Пул `/24` с дочерним `/30` (`.0–.3`) и занятым `.5`: `POST …/addresses/next` → `.4`; ещё раз → `.6`. Параллельно 5 запросов (потоки) → 5 разных адресов, все 201. ## Проверка `pytest -q`; UI не меняется (кнопка автоназначения отсутствует в UI — проверка через Swagger).