Browse Source

Document stream CHAT integration and signed member option format

master
evgeny 5 days ago
parent
commit
fa79b7d30c
  1. 31
      doc/stream.txt
  2. 9
      doc/tasks.md

31
doc/stream.txt

@ -393,6 +393,14 @@ adm_tags — блок владельца, для самоуправляемых
- stream_subscriptions: список (source_node_id, source_epoch), на которые узел локально подписан. - stream_subscriptions: список (source_node_id, source_epoch), на которые узел локально подписан.
Формат — совместимые с существующим плоским userinfo строковые значения; список кодируется однозначно, Формат — совместимые с существующим плоским userinfo строковые значения; список кодируется однозначно,
со строгим разбором 64-битных IDs без потери точности через JSON numbers. со строгим разбором 64-битных IDs без потери точности через JSON numbers.
Зафиксированный формат:
stream_source = "<source_epoch:16 lowercase hex>:<n:decimal>:<r:decimal>:<block_size:decimal>"
stream_subscriptions = "<source_node_id:16 lowercase hex>:<source_epoch:16 lowercase hex>,..."
Отсутствующая/пустая опция означает отсутствие активности. Подписки отсортированы по source_node_id, затем эпохе;
нулевые IDs/эпохи, дубликаты, неверные разделители, ведущие нули decimal и переполнение отвергаются.
Активная публикация требует записи собственной трансляции в stream_subscriptions.
Максимум элементов списка — MS_USERINFO_MAX/34; фактически доступное число дополнительно ограничено
размером всего JSON с именем, аватаркой и прочими сохранёнными опциями. Две stream-опции меняются атомарно.
Источник включает свою трансляцию в собственные подписки. Источник включает свою трансляцию в собственные подписки.
Список относится к трансляциям, а не к сетевым handles или выбранным upstream-поставщикам. Список относится к трансляциям, а не к сетевым handles или выбранным upstream-поставщикам.
@ -492,9 +500,21 @@ Stop/destroy выполняются по правилам ядра, вне callb
./build.sh --no-gui -j4 и ./check.sh прошли: 143 passed, 0 failed, 0 skipped; ./build.sh --no-gui -j4 и ./check.sh прошли: 143 passed, 0 failed, 0 skipped;
отдельные proxy/full, burst и load также PASS. Лог: /tmp/stream-check.log. отдельные proxy/full, burst и load также PASS. Лог: /tmp/stream-check.log.
[ ] Включение в жизненный цикл чат-сервиса: [+] Включение в жизненный цикл чат-сервиса — 11.10.2026:
контекст модуля в UTUN_INSTANCE, публичные локальные подписки/публикация, события потребителя, stream.c/h — контекст в UTUN_INSTANCE, локальные handles публикации/подписки, общий экземпляр и буфер.
stream_source/stream_subscriptions в блоке мембера, сохранение остальных userinfo и BGP-фильтр кандидатов. DATA/GAP/END/CLOSED доставляются отложенно через один callback экземпляра ядра;
callback может закрывать handles, заимствованные данные живут до его возврата.
stream_member.c/h — канонические опции, проверка подписанного профиля/ключа и членства,
online-кандидаты только из живых BGP-путей этой CHAT-группы; мобильный источник допускается, relay исключается.
chat_core_set_my_profile_options — атомарная замена опций с сохранением имени, аватарки и остальных userinfo.
При старте снимаются оставшиеся после аварии собственные опции; смена эпохи/ключа или утрата членства отменяют подписку.
Удаление группы и остановка CHAT отменяют таймеры/события, отсоединяют handles и освобождают буферы;
detached handle остаётся во владении вызывающего до stream_close, общий UTUN/транспорт сохраняется.
test_stream_service: четыре живых ядра, Merkle-обмен через ETCP, две группы, общий буфер двух владельцев,
BGP withdraw с сохранённой опцией, смена эпохи, потеря своего членства, удаление канала, restart и отмена таймера.
Проверены rollback размера/SQLite, FEC-доставка непрозрачных байтов и закрытие из DATA callback, DATA перед END.
Тест прошёл, счётчик живых аллокаций после destroy вернулся к нулю. Лог: /tmp/stream-service-test-final.log.
Найденная тестом утечка существующих BGP-путей исправлена: записи освобождаются до контейнера node_paths.
[ ] Сетевая выдача: [ ] Сетевая выдача:
raw/router IDs, INFO и поколения сессий, 64-битные handles, SUBSCRIBE/RENEW/CLOSED, raw/router IDs, INFO и поколения сессий, 64-битные handles, SUBSCRIBE/RENEW/CLOSED,
@ -508,4 +528,7 @@ Stop/destroy выполняются по правилам ядра, вне callb
пути/защита от циклов, стартовые 32 пробы, дальнейший темп 1/с и полный цикл не чаще 30 с, пути/защита от циклов, стартовые 32 пробы, дальнейший темп 1/с и полный цикл не чаще 30 с,
постепенный перенос с перекрытием, failover, несколько источников и независимое закрытие на общем ETCP. постепенный перенос с перекрытием, failover, несколько источников и независимое закрытие на общем ETCP.
Текущие компоненты — основа модуля данных; сетевые bindings, Merkle-опции и вызовы из UTUN_INSTANCE ещё не подключены. Текущие компоненты включают основу данных, локальный API и Merkle/BGP-интеграцию в CHAT.
Сетевая выдача DATA между stream-экземплярами ещё не подключена: test_stream_service передаёт блоки
во внутренний dispatcher явно, а опции распространяет настоящим Merkle-обменом поверх ETCP.
Следующий этап — raw/router bindings, отдельные NCD-владельцы и REVERSE_REQ, выдачи из кольца с handles/арендой.

9
doc/tasks.md

@ -9,8 +9,13 @@
подписанные FEC-блоки 1300 байт, общий буфер 32 МБ, относительные timestamp-метрики, подписанные FEC-блоки 1300 байт, общий буфер 32 МБ, относительные timestamp-метрики,
источник с таймером 100 мс и категория stream. test_stream_core прошёл; источник с таймером 100 мс и категория stream. test_stream_core прошёл;
./check.sh: 143 passed, 0 failed, 0 skipped; proxy/full, burst и load — PASS. ./check.sh: 143 passed, 0 failed, 0 skipped; proxy/full, burst и load — PASS.
Следующий этап — жизненный цикл CHAT и опции мембера через Merkle с фильтром BGP, 11.10.2026 подключены жизненный цикл CHAT, локальные handles/API и события потребителя,
затем NCD-выдачи/reverse, общий отправитель/перегрузка и оптимизация путей. атомарные опции мембера через Merkle, подписанные профили и BGP-фильтр кандидатов.
test_stream_service прошёл на четырёх ядрах: две группы, смена эпохи/членства, restart,
rollback профиля, закрытие из callback и нулевой остаток аллокаций после destroy.
Лог: /tmp/stream-service-test-final.log. Исправлена выявленная утечка BGP node_paths при удалении узла.
Следующий этап — сетевая выдача DATA: NCD/reverse, handles/аренда и курсоры кольца;
затем общий отправитель/перегрузка и оптимизация путей.
[+] **test_reality_tls: коллизии порта слушателя** — 10.10.2026: [+] **test_reality_tls: коллизии порта слушателя** — 10.10.2026:
В общем прогоне 140 passed, 1 failed: stcp_server_create не смог занять порт 34922, bind errno=98 (EADDRINUSE). В общем прогоне 140 passed, 1 failed: stcp_server_create не смог занять порт 34922, bind errno=98 (EADDRINUSE).

Loading…
Cancel
Save