fix(backups): не повторять импорт после потери ответа

This commit is contained in:
Denozordec committed 2026-10-01 16:22:06 +07:00
1 parent 99ff5aebaf
commit 39570656c9
10 files changed
+63 -8

No files matched your search

+9 -1
View File
@@ -27,7 +27,7 @@
| 8 | Трафик и статистика | Завершён 2026-09-28 в границах локальной приёмки; ограничения в блоке 8.13 |
| 9 | VPN, Firewall и Filters | Завершён в границах локальной приёмки 2026-09-30; блоки 9.1–9.64, ограничения в 9.64 |
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | В работе: 11А.1–11А.29.3; пользователи/контейнеры/сертификаты приняты локально; резервные копии: идентичность restore, далее 11А.29.4 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | В работе: 11А.1–11А.29.4; пользователи/контейнеры/сертификаты приняты локально; резервные копии: неизвестный outcome backend, далее 11А.29.5 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
@@ -36,6 +36,14 @@
## Блок 11А.29.4 — неизвестный результат импорта на backend (2026-10-01)
- Import fallback /execute разрешён только при RouterOS HTTP 404/405 для /import. Таймаут/обрыв, невалидный JSON, 400/401/500 не запускают второй импорт. После отправки команды любая ошибка маркируется BackupRestoreUnknownError; HTTP 502/outcome unknown не объявляет конфигурацию неизменённой. Ошибка подготовки до импорта остаётся 400/outcome not-applied.
- Событие успешного импорта пишется независимо от HTTP receipt: медленный/отказавший журнал не удерживает подтверждённый ответ. Успешный импорт не повторяется helper-функцией.
- 3 restore fault unit (сети в них нет), весь backend test:backups с HTTP outcome 502/400, backend production build прошли. Профильный lint новых/helper/service/routes файлов прошёл. В mikrotik.ts остались две исходные prefer-const ошибки (req/entry); наличие обеих подтверждено lint версии HEAD до изменения, новых lint ошибок нет.
- Реальный RouterOS не проверен; /execute receipt подтверждает ответ команды, не завершение всех изменений конфигурации. Backend durable restore/idempotency repository пока отсутствует; клиентский запрет слепого повтора нужен следующим блоком.
- **Следующий блок 11А.29.5:** checkpoint restore до POST, неизвестный результат/после reload и явная проверка роутера перед новым импортом; затем URL/Frame/адаптивность, scheduler и приёмка backups.
## Блок 11А.29.3 — идентичность подтверждения импорта (2026-10-01)
- Restore receipt содержит backupId и numeric serverId наряду с filename/актуальным serverName. API проверяет обе цели, страница проверяет filename. UI serverId преобразуется из string в number согласно контракту. Ответ чужого сервера/бэкапа и старый неполный receipt не закрывают диалог и не подтверждают импорт. Переименование сервера не считается ошибкой.