Cover paused sources and duplicate relay controls during startup

This commit is contained in:
evgeny committed 2026-10-13 16:32:53 +02:00
1 parent 8206e53b5c
commit eda8dfbc91
3 files changed
+46 -7

No files matched your search

+15 -4
View File
@@ -882,8 +882,14 @@ test_stream_service также проверяет общий каталог дв
21. Суперузлы: помощь в раздаче по запросу
Сам старт публикации не запускает приём на суперузлах. Selector зрителя запрашивает помощь после 5 секунд
недостатка действующих субпотоков для k=n-r. Для остановившихся выдач требуется также свидетельство более свежих данных;
Сам старт публикации не запускает приём на суперузлах. Новая подписка сразу запускает INFO-пробы и отдельный
дедлайн 100 мс. Если пригодного ответа ещё нет, запрашивается один суперузел. Первый валидный INFO с разрешённой
выдачей выигрывает: порядок приёма фиксируется локальным счётчиком, независимо от RTT и порядка списка кандидатов.
Проигравшие пробы и неподключённая помощь отменяются. DATA сначала открывается только у победителя; проверенный
первый блок фиксирует общий старт всех остальных субпотоков. До первого восстановления FEC выбирается победитель,
затем действует обычный оптимизатор. Пустой доступный источник не требует помощи, пока он не публикует данные.
Для восстановления работающего потока сохраняются 5 секунд недостатка действующих субпотоков для k=n-r.
Для остановившихся выдач требуется также свидетельство более свежих данных;
пауза источника, отсутствие полной FEC-защиты и недобор всех n сами по себе не запускают помощь.
Выбирается один онлайн-суперузел данной CHAT-группы с допустимой NCD-попыткой; после неуспеха пробуется следующий.
Канальная роль берётся из принятого блока владельца adm_tags.supernode, не из client_type/storage/node_type.
@@ -906,11 +912,15 @@ STATUS: state:1,reason:1,remaining_ms:4; для ENDED дополнительно
Состояния: STARTING=1, READY=2, BOUND=3, REJECTED=4, ENDED=5, CANCELLED=6.
ENDED в ответе помощи разрешён только для пустого источника (last_seq=UINT64_MAX) и проверяется ключом источника.
Bootstrap ограничен 15 секундами с первого запроса, повторы срок не продлевают. READY означает наличие
реальных блоков хотя бы одного субпотока с допустимым путём к запросившему; окончательные индекс/путь/FEC
Bootstrap ограничен 15 секундами с первого запроса, повторы срок не продлевают. READY означает восстановление
первой FEC-пачки и наличие реальных блоков с допустимым путём к запросившему; окончательные индекс/путь/FEC
проверяются INFO/ACCEPT/DATA. Переход к READY даёт отдельные 5 секунд для SUBSCRIBE.
READY будит selector и снимает старый backoff данного пира. Подтверждённый поставщик временно допускается
и выборкой кандидатов, и receive_open, независимо от задержки его Merkle-опции.
Первое подтверждение поколения и переходы состояний отправляются отложенно сразу; одинаковые повторы ограничены 1 с.
Объединённая работа управления выполняется после packet/NCD callbacks. Общий таймер обслуживает сроки/метрики,
новые INFO/ACCEPT/READY и первый DATA/восстановленный блок будят управление без ожидания следующего тика.
Все таймеры/отложенные вызовы/queue waiters отменяются до освобождения владельца.
После первой действующей выдачи запрос становится BOUND; дальнейшую потребность подтверждают обычные RENEW/аренда.
Если помощь не даёт прогресса потребителя 15 секунд и набор по-прежнему недостаточен, её выдачи закрываются,
selector пробует другого суперузла. Запросы/ответы не продлевают аренду raw-выдач.
@@ -937,6 +947,7 @@ Relay-only экземпляр не запрашивает новую помощ
Отказы по роли, эпохе, лимитам, таймауту и перегрузке диагностируются с причиной.
test_stream_service проверяет отсутствие помощи при прямом успехе/паузе источника, автоматический fallback,
дедлайн 100 мс, обе стороны гонки, поздние INFO/REQUEST проигравшего, дубликаты STATUS и общий старт при n=8/r=2,
раздачу нескольким зрителям, общий owner с локальным viewer, остановку при уходе последнего,
поздний повтор запроса до/после удаления tombstone, CANCEL до REQUEST, истечение READY без SUBSCRIBE,
откат неуспешного добавления viewer, исключение relay-only кандидатов и передачу пустого подписанного END.
+8
View File
@@ -4,6 +4,14 @@
## Текущие задачи
[ ] **Live: ускорить начальное подключение** — 13.10.2026:
Дедлайн помощи 100 мс и первый пригодный INFO выбирают поставщика; DATA использует один общий старт.
Управление просыпается по событиям, подтверждение поколения и новые состояния помощи не ждут 1 с.
READY требует восстановленной FEC-пачки. Регрессии: прямой/relay победитель, поздние ответы,
отмена до дедлайна, пустой источник, дубликаты, общий индекс 8/2 и освобождение ресурсов.
Начальная очередь аудио прогревает Opus и обрезается по первому KEY; prefill 150 мс начинается после него.
Выполняется общая проверка ядра, desktop и APK. Контракт: `doc/stream.txt`, раздел 21.
[+] **Live: сквозное стерео и три компактные кнопки поворота** — 13.10.2026:
CAMCORDER/Opus/компрессор/Android AudioTrack/desktop output используют два канала,
Opus AUDIO 128kbps. audio_codec=2 обозначает stereo; 960 кадров на канал дают 1920 PCM-отсчётов.