conn_mgr: verify route loss and document handle lifetime recovery
This commit is contained in:
1 parent
464575ef44
commit
426fc2f4e8
2 files changed
+134
-5
No files matched your search
@@ -61,8 +61,36 @@ DIRECT/REVERSE/INDIRECT/NONE. Событие `CHAT_EVT_CALL_CONNECTION` соде
|
||||
|
||||
После готовности прямого пути новые дополнительные пробы не запускаются.
|
||||
Уже начатое согласование INDIRECT может завершиться и сохранить резерв.
|
||||
После начального бюджета поздние NCD/READY всё ещё могут улучшить путь. Бесконечные
|
||||
повторные поиски посредников и гарантированное восстановление не предусмотрены.
|
||||
|
||||
## Восстановление
|
||||
|
||||
Потребность в доставке живёт столько же, сколько сервисные handles. Начальный
|
||||
TIMEOUT и срок очередного цикла проб независимы: начальный TIMEOUT приходит один
|
||||
раз, если до начального дедлайна ни один путь не заработал. Он не прекращает поиск.
|
||||
|
||||
При потере прямого пути сразу используется пригодный подтверждённый резерв.
|
||||
Если потеряны все пути, сервис получает DOWN. Затем новый цикл запускает DIRECT
|
||||
и LOCAL сразу, REVERSE через 0/500 мс; при отсутствии пригодного резерва INDIRECT
|
||||
запускается сразу независимо от NAT. Рабочий посредник сохраняется во время проб.
|
||||
Каждый цикл ограничен 15 секундами. Между неудачными циклами пауза растёт:
|
||||
1 → 2 → 4 → 8 → 15 секунд, далее остаётся 15 секунд. Подтверждённый прямой READY
|
||||
останавливает поиск и сбрасывает паузу.
|
||||
|
||||
Свежая версия записи пира или изменение локальных сокетов обходят паузу и запускают
|
||||
новую пробу. Изменения сокетов передаются через `conn_mgr_network_changed()`.
|
||||
Работающие прямые соединения дополнительных проб не требуют. NCD сохраняется
|
||||
между циклами; новый handle создаётся только после CLOSED. Существующие UDP-пробы
|
||||
и TCP reconnect продолжаются; отсутствующие адресные линки добавляются без дублей.
|
||||
|
||||
Каждый исходящий цикл имеет новые request_id. Ответы старых/завершённых циклов
|
||||
игнорируются. Входящие запросы имеют отдельный срок обработки: новый request_id
|
||||
начинает новый срок, повтор того же запроса его не продлевает. Входящая запись
|
||||
без сервисного владельца обслуживает запрос, затем освобождается и сама постоянное
|
||||
восстановление не запускает. Закрытие последнего сервисного handle отменяет таймеры
|
||||
и отложенные callbacks; групповые владельцы транспорта продолжают жить независимо.
|
||||
|
||||
Восстановление зависит от доступных адресов, маршрутов и READY-сессий. Оно не меняет
|
||||
порог обнаружения транспортного обрыва ETCP и таймаут завершения звонка без медиа.
|
||||
|
||||
## INDIRECT
|
||||
|
||||
@@ -97,7 +125,8 @@ INTERM_SELECTED и INTERM_ACK содержат request_id и до трёх `{nod
|
||||
- UP означает появление пригодного пути. Улучшение пути не повторяет UP.
|
||||
- DOWN означает потерю рабочих путей; при живом резерве DOWN не доставляется.
|
||||
- TIMEOUT означает, что начальное подключение не получило ни одного рабочего пути.
|
||||
Ошибка отдельной пробы при живом посреднике не становится TIMEOUT для сервиса.
|
||||
При живом handle поиск продолжается. Ошибка отдельной пробы при живом посреднике
|
||||
не становится TIMEOUT для сервиса; после первого UP начального TIMEOUT уже не будет.
|
||||
- DOWN/TIMEOUT не освобождают handle. Владелец обязан вызвать `conn_mgr_close()`.
|
||||
- Закрытие последнего handle отменяет CM timer и callbacks и закрывает только
|
||||
NCD-владение CM. Группа и другие NCD-владельцы сохраняют транспорт.
|
||||
@@ -105,10 +134,13 @@ INTERM_SELECTED и INTERM_ACK содержат request_id и до трёх `{nod
|
||||
при INDIRECT/отсоединённом handle. Данные следует отправлять через router.
|
||||
|
||||
Диагностика CM — категория `general`: INFO показывает расписание, выбор и смену
|
||||
пути с временем от старта; DEBUG — события NCD, RTT и обработку ответов; WARN/ERROR —
|
||||
пути с временем от старта, новые циклы и паузы; DEBUG — события NCD, RTT и обработку ответов; WARN/ERROR —
|
||||
ошибки, недоступные пути и некорректные пакеты. Создание адресных линков NCD —
|
||||
категория `connection`.
|
||||
|
||||
Проверки: `test_conn_mgr`, `test_conn_mgr_handles`, `test_conn_mgr_already_connected`,
|
||||
`test_conn_mgr_phases`. Последний проверяет расписание, LAN, односторонний INDIRECT,
|
||||
поздний DIRECT после NCD TIMEOUT, резерв, реальные данные и обработку кандидатов.
|
||||
поздний DIRECT после NCD TIMEOUT, резерв, реальные данные и обработку кандидатов,
|
||||
обрыв после начального срока, повторные циклы с реальными паузами 1/2/4с, смену адресов
|
||||
и локальных сокетов, потерю маршрута посредника, устаревший ACK, начальный TIMEOUT
|
||||
с последующим UP и закрытие последнего handle из TIMEOUT callback.
|
||||
Reference in new issue
Block a user