|
|
|
@ -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/арендой. |
|
|
|
|