Browse Source

Document callback-driven supplier discovery and verification

master
evgeny 6 days ago
parent
commit
3f6cc5da52
  1. 7
      doc/stream.txt
  2. 13
      doc/tasks.md
  3. 2
      src/stream/stream_optimizer.h

7
doc/stream.txt

@ -920,6 +920,12 @@ Bootstrap ограничен 15 секундами с первого запро
проверяются INFO/ACCEPT/DATA. Переход к READY даёт отдельные 5 секунд для SUBSCRIBE.
READY будит selector и снимает старый backoff данного пира. Подтверждённый поставщик временно допускается
и выборкой кандидатов, и receive_open, независимо от задержки его Merkle-опции.
Callback принятых свойств участника Merkle/BGP помечает roster нужного канала устаревшим. Сверка выполняется
отложенно после проверки членства/эпох; несколько callbacks объединяются. Новый совместимый кандидат запускает
INFO без ожидания секундного расписания, а существующие пробы/цикл и backoff ошибок не сбрасываются.
Если новый буфер ещё заполняется и INFO latest отвергнут с POSITION, повторный обход допускается через 100 мс
в пределах фиксированного окна 5 с; транспортный backoff и обычный обход 30 с сохраняются.
Периодическая сверка roster раз в секунду остаётся резервной.
Первое подтверждение поколения и переходы состояний отправляются отложенно сразу; одинаковые повторы ограничены 1 с.
Объединённая работа управления выполняется после packet/NCD callbacks. Общий таймер обслуживает сроки/метрики,
новые INFO/ACCEPT/READY и первый DATA/восстановленный блок будят управление без ожидания следующего тика.
@ -955,6 +961,7 @@ Relay-only экземпляр не запрашивает новую помощ
test_stream_service проверяет отсутствие помощи при прямом успехе/паузе источника, автоматический fallback,
дедлайн 100 мс, обе стороны гонки, поздние INFO/REQUEST проигравшего, ограничение ответов на повторы REQUEST и общий старт при n=8/r=2,
выбор помощника через Merkle/INFO раньше задержанного READY без преждевременной отмены выбранной выдачи,
callback обнаружения поставщика без секундной паузы, повторные уведомления без лишних проб и заполнение раннего буфера,
раздачу нескольким зрителям, общий owner с локальным viewer, остановку при уходе последнего,
поздний повтор запроса до/после удаления tombstone, CANCEL до REQUEST, истечение READY без SUBSCRIBE,
откат неуспешного добавления viewer, исключение relay-only кандидатов и передачу пустого подписанного END.

13
doc/tasks.md

@ -4,6 +4,19 @@
## Текущие задачи
[+] **Live: callback обнаружения поставщиков** — 13.10.2026:
Принятые изменения Merkle и BGP помечают roster оптимизаторов соответствующего канала устаревшим.
Сверка/пробы выполняются после callback одним объединённым отложенным проходом в uasync.
Новый доступный поставщик опрашивается сразу; существующие пробы, цикл и backoff ошибок сохраняются.
Временно пустой буфер повторно опрашивается через 100 мс в пределах фиксированных 5 с,
чтобы ранняя подписанная опция не оставляла недостающие субпотоки до обхода через 30 с.
Регрессия с настоящим Merkle/BGP и задержанным READY: до исправления проверка задержки падала,
после принятого объявления INFO получен через 6 мс. Повторные callbacks не размножают пробы;
общий старт 8/2 и освобождение всех tracked allocations проверены.
149 тестов ядра, 43 Android-теста и desktop stream/audio timing прошли; GUI и APK собраны.
Логи: `/tmp/stream-provider-callback-{before,retry,full-check}.log`,
`/tmp/stream-provider-callback-{gui-tests,android-build}.log`.
[+] **Live: выбранная выдача отменяла помощь до READY/ACCEPT** — 13.10.2026:
Первое открытие desktop 17:07:41.035 → первый кадр 17:07:44.500 заняло 3.464 с;
запрос помощи отправлен через 99 мс, первый FEC через 2.490 с, KEY ещё через 0.796 с,

2
src/stream/stream_optimizer.h

@ -1,5 +1,5 @@
/* Один планировщик на локальный экземпляр; handles владельцев не размножают пробы/выдачи.
* tick вызывается общим stream network timer, destroy отменяет все свои receive/probe handles. */
* tick вызывается отложенным stream network проходом и таймером, destroy отменяет все свои receive/probe handles. */
#ifndef STREAM_OPTIMIZER_H
#define STREAM_OPTIMIZER_H

Loading…
Cancel
Save