Files
ayurishchevandClaude Opus 5.5 03d727e496 Задачи 025-030: ёмкость префиксов, политика входа, дерево префиксов
Повторный анализ кодовой базы (docs/reviews/2026-09-26-codebase-review-2.md) и доработки:
025 Ёмкость префикса — размер его подсети (а не сумма листьев); «Обзор» считает ёмкость
    по корневым активным IPv4-префиксам и адреса внутри них.
026 Политика блокировки входа: 5 неудач на логин+IP, 20 на IP, 50 на логин со всех IP,
    кроме известных IP (known_logins, миграция 0009) — владельца нельзя заблокировать анонимно.
027 Сериализация попыток входа по IP (advisory-lock после блокировки логина).
028 UI «Префиксы»: загрузка всех страниц (до 20 000), счётчики по total, предупреждение об усечении.
029 Advisory-lock по VRF для операций, меняющих дерево префиксов и раскладку адресов.
030 Исправление замечаний ревью 025-029: _lock_prefix (VRF блокируется до чтения префикса,
    409 при одновременном переносе), константы политики входа перенесены в app/services.py.

Тесты: 14 passed (проверка ёмкости родителя приведена к семантике 025); сквозные сценарии
и гонки — docs/reviews/2026-09-26-changes-025-029-review.md, 2026-09-27-changes-030-review.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 08:28:50 +03:00

3.8 KiB

Итог: экран «Префиксы» без молчаливого усечения (изменение 028)

Что сделано

  • web/app.js: добавлена функция loadPrefixes(orgId) — последовательно догружает все страницы /prefixes (limit=1000, offset увеличивается на длину полученной страницы) до total, но не больше PREFIX_UI_CAP = 20000 префиксов; возвращает { items, total }.
  • screens.prefixes и screens.address используют loadPrefixes вместо одиночного запроса с limit=1000.
  • Заголовок («N префиксов»), вкладка «Все» и подвал таблицы теперь используют pl.total (реальное общее число), а не all.length (число загруженных).
  • Если сработал предел PREFIX_UI_CAP (items.length < total), над таблицей выводится информационная строка .info: «Загружено X из N префиксов — уточните поиск или выберите VRF».
  • Бэкенд не менялся.
  • README.md, раздел «Поведение таблиц UI»: добавлено предложение о постраничной догрузке и пределе 20 000.

Отклонения от плана

Нет.

Как проверено

  1. node --check web/app.js — без ошибок.
  2. Сценарий из плана воспроизведён на API-уровне (браузер недоступен в этой среде, поэтому визуальный рендер заголовка не смотрели глазами, но проверили именно тот запрос/расчёт, который его формирует): временная организация rv3-page-test (scratchpad-скрипт), родитель 10.0.0.0/12, 1100 вложенных /30 через POST …/subnets/next (по одному, как в плане) — всего 1101 префикс. Затем эмуляция ровно алгоритма loadPrefixes (limit=1000, offset += len(page.items), до total) через прямые вызовы API:
    • total=1101, загружено 1101 элементов за 2 страницы (1000 + 101) — соответствует «в UI заголовок «1 101 префикс», все строки доступны» из плана. PASS.
  3. Удаление 1100 вложенных префиксов заняло ~32 с, само создание — ~100 с (растёт с числом уже выделенных блоков в одном родителе — ожидаемо, это не предмет изменения 028). Временная организация и все её префиксы удалены по завершении (org delete: 204).

Не проверено

  • Собственно визуальный рендер (браузер недоступен в этой среде): заголовок, строка-предупреждение .info при срабатывании PREFIX_UI_CAP, поведение вкладок и подвала на живой странице. Логика, формирующая эти значения (pl.total, truncated), проверена чтением кода и совпадает с тем, что подтверждено на уровне API.
  • Собственно предел PREFIX_UI_CAP = 20000 (сценарий с >20 000 префиксов) — не воспроизводился (потребовал бы кратно больше времени на создание тестовых данных).