Record INFO expiry fix and complete IPv6-isolated verification
This commit is contained in:
1 parent
b116b20b11
commit
5259c746d1
3 files changed
+78
-13
No files matched your search
+3
-3
@@ -11,9 +11,9 @@ stream_block.h, stream_source.h, stream_media.h и stream_optimizer.h; оста
|
||||
Дефект publisher_block устранён: помещающийся Opus уходит в отдельную аудиопачку,
|
||||
ожидающее видео получает следующий слот actor. Штатный test_stream_publisher
|
||||
проверяет 23 сценария границ, продвижения треков и OPENING/FIN; раздел 7 отчёта.
|
||||
При продолжении найден дефект expire_controls: ожидается длина INFO_REQ8 вместо9,
|
||||
поэтому просроченный запрос удаляется без закрытия его пробы. Аудит остановлен;
|
||||
реализация не исправлена, изолированное подтверждение и вариант исправления — раздел8 отчёта.
|
||||
Дефект expire_controls устранён: INFO_REQ9 сопоставляется по probe_id, просроченная
|
||||
проба закрывается с OVERLOAD. Штатные проверки TTL и реальной ETCP-очереди пройдены;
|
||||
полный check201/201 выполнен в отдельном IPv6 namespace — раздел9 отчёта.
|
||||
|
||||
1. Цель и принятые решения
|
||||
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
описывают первоначальную диагностику и проверку архитектуры до внедрения deleted.
|
||||
В продолжении полностью прочитаны stream.c и stream_optimizer.c, уточнены их
|
||||
заголовки; теперь6[V]/12[~]/0[ ]. В частично прочитанном network подтверждён
|
||||
новый дефект истечения INFO_REQ; реализация не менялась, остановка по AGENTS.md:10 (раздел8).
|
||||
дефект истечения INFO_REQ (раздел8). Исправление и штатные проверки выполнены:
|
||||
TTL4/4, обе реальные backpressure-сцены и check201/201 в отдельном IPv6 namespace PASS (раздел9).
|
||||
|
||||
1. Подтверждённый дефект: deleted не учитывается stream_member_load
|
||||
|
||||
@@ -393,3 +394,57 @@ TTL отдельным штатным regression; дополнительно у
|
||||
в doc/tasks.md; текущий статус отражён в stream.txt и внешнем чек-листе.
|
||||
Полная сборка/check и sanitizers в этом продолжении не запускались; прежний
|
||||
check200/200 относится к исправлению publisher и новый дефект не покрывает.
|
||||
|
||||
9. Исправление INFO expiry и проверка ETCP backpressure — 26.10.2026
|
||||
|
||||
expire_controls теперь сопоставляет полный INFO_REQ9 (ID8 + media1) с текущей
|
||||
пробой. Проверка probe_id сохранена; истёкший запрос закрывает flow через прежний
|
||||
flow_close(OVERLOAD,notify0). Wire, состояния и таймеры не менялись.
|
||||
Существующий WARN дополнен bytes/age_ms/flow_closed: видно удаление конкретного
|
||||
control и наличие связанного закрытия. Код исправления c1483512, тесты b116b20b.
|
||||
Во время работы история перенесена поверх GUI-изменений; отсутствие различий
|
||||
в src/lib/tests относительно собранного d89c1efa проверено отдельно.
|
||||
|
||||
Штатный test_stream_control_expiry включён в общий check и напрямую использует
|
||||
реальные control_put/wire parser/expire_controls. Проверены границы3999/4000/4001мс:
|
||||
INFO9 media0/1 после TTL закрывают flow с OVERLOAD, несовпадающий probe_id
|
||||
не закрывает текущую попытку, SUBSCRIBE8 сохраняет прежнюю обработку.
|
||||
4/4 PASS; отслеживаемые allocations после cleanup восстановлены.
|
||||
|
||||
В test_stream_service добавлена проверка на четырёх настоящих CHAT-ядрах с Merkle,
|
||||
NCD и живым ETCP. Она выполняется в общем наборе и отдельно через --control-expiry-only.
|
||||
После прогрева NCD/INFO callback настоящей send_input_q временно снимается.
|
||||
Первый INFO остаётся в ETCP, второй — в control FIFO. Через4200мс в обоих media-режимах:
|
||||
expired_sub0 state=CLOSED reason=OVERLOAD; held_sub1 state=INFO; publication/subscription
|
||||
активны, исходное ETCP-соединение initialized/links_up. После возврата callback
|
||||
приходит INFO_RESP; просроченная проба переоткрывается и получает новый ответ через
|
||||
то же ETCP-соединение. Cleanup всех четырёх ядер восстанавливает tracked allocations.
|
||||
В общем check этот же сценарий также прошёл внутри полного test_stream_service.
|
||||
|
||||
Проверки и условия среды
|
||||
|
||||
./build.sh --no-gui -j4 PASS: /tmp/stream-info-expiry-fix-build.log.
|
||||
test_stream_control_expiry4/4 PASS: /tmp/stream-info-expiry-fix-unit.log.
|
||||
test_stream_service --control-expiry-only PASS: /tmp/stream-info-expiry-fix-integration.log.
|
||||
В изолированном сетевом прогоне включён stream=debug; unit включает video=warn,
|
||||
поэтому проверен также новый WARN с bytes9/flow_closed1 и несовпадением ID/flow_closed0.
|
||||
В fixture остаются логи отрицательных reachability-проб TCP; потоковые asserts,
|
||||
готовность транспорта, восстановление и счётчики ресурсов проверены отдельно.
|
||||
|
||||
Первый ./check.sh:198 passed,3 failed,0 skipped. Все три отказа вызваны bind(::1):
|
||||
EADDRNOTAVAIL в test_ncd_faults, test_ipv6_sockets, test_route_connectivity.
|
||||
IPv6 в основном namespace отключён (all/default/lo=1), ::1 отсутствует,
|
||||
bind(::) работает. Сводка /tmp/stream-info-expiry-fix-full-check.log;
|
||||
состояние среды /tmp/stream-info-expiry-host-ipv6.log. Код из-за этих отказов не менялся.
|
||||
|
||||
Создан отдельный временный network namespace; IPv6 включён только в нём,
|
||||
поднят lo/::1, сами проверки выполнялись от user. Все три прежних отказа PASS,
|
||||
затем ./check.sh:201 passed,0 failed,0 skipped. Новый unit32мс, service80173мс.
|
||||
Proxy9/9,burst PASS,load8/8,134217728 байт; полное время175с.
|
||||
Логи /tmp/stream-info-expiry-fix-ipv6-env.log,
|
||||
/tmp/stream-info-expiry-fix-ipv6-full-check.log и /tmp/stream-info-expiry-ipv6-test_*.log.
|
||||
Основной namespace сохранён: all/default/lo=1 и bind(::1) по-прежнему EADDRNOTAVAIL.
|
||||
Необходимость явной IPv6-диагностики runner записана отдельной задачей в doc/tasks.md.
|
||||
|
||||
git diff --check PASS. Sanitizers, Qt GUI и Android на устройстве в этом исправлении
|
||||
не запускались. Устранение дефекта не расширяет аудит:6[V]/12[~]/0[ ],doc/stream.txt[~].
|
||||
+19
-9
@@ -4,15 +4,25 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **stream: закрывать INFO-пробу при истечении её 9-байтового запроса** — найдено 26.10.2026.
|
||||
prepare_requests создаёт INFO_REQ из probe_id8 + media_flag1; expire_controls ошибочно проверяет length8.
|
||||
После TTL управляющей очереди4000мс запрос удаляется, но flow остаётся INFO до общего deadline5000мс.
|
||||
По коду это меняет причину на TRANSPORT и обработку восстановления selector вместо OVERLOAD.
|
||||
Изолированно проверены настоящие control_put/wire parser/expire_controls: оба media0/1 воспроизводят дефект;
|
||||
устаревший probe_id и SUBSCRIBE8 обработаны правильно. Лог /tmp/stream-audit-info-expiry.log:2 failed из4.
|
||||
Временная копия с проверкой9 даёт4/4 PASS; /tmp/stream-audit-info-expiry-checked.log; tracked allocations восстановлены.
|
||||
Исправить проверку длины, сохранить сверку probe_id; добавить regression до/на/после TTL и с реальным backpressure.
|
||||
Реализация не менялась; аудит остановлен по AGENTS.md:10. Подробности: [stream_audit_findings.txt](stream_audit_findings.txt),раздел8.
|
||||
[+] **stream: закрывать INFO-пробу при истечении её 9-байтового запроса** — исправлено и проверено 26.10.2026.
|
||||
expire_controls сверяет length9 и текущий probe_id; истёкший INFO закрывает flow с OVERLOAD.
|
||||
Лог содержит размер, возраст control и факт закрытия flow; чужой probe_id не закрывает новую попытку.
|
||||
test_stream_control_expiry4/4 PASS: обе media-формы, SUBSCRIBE8, до/на/после TTL и несовпадающий ID.
|
||||
test_stream_service проверяет оба media-режима: настоящая очередь ETCP удерживается4,2с,
|
||||
второй INFO истекает в control FIFO до общего deadline5с; после разблокировки ответ/повторное открытие успешны.
|
||||
Общее ETCP-соединение и handles публикации/подписки сохраняются; cleanup без tracked leaks.
|
||||
Сборка PASS. Первый check198/201: три отказа из-за отсутствующего ::1 при отключённом IPv6 окружения.
|
||||
В отдельном IPv6 namespace check201/201 PASS,0 failed/0 skipped; proxy9/9,burst PASS,load8/8,134217728 байт,175с.
|
||||
Настройки основного namespace не менялись. Логи /tmp/stream-info-expiry-fix-build.log,
|
||||
/tmp/stream-info-expiry-fix-unit.log, ...-integration.log, ...-ipv6-full-check.log.
|
||||
Подробности: [stream_audit_findings.txt](stream_audit_findings.txt),разделы8–9. Аудит остальных контрактов stream частичный.
|
||||
|
||||
[ ] **tests: явно проверять IPv6-предпосылку полного набора** — замечено 26.10.2026.
|
||||
В основном окружении disable_ipv6=1 для all/default/lo, ::1 отсутствует; bind(::1) даёт EADDRNOTAVAIL.
|
||||
Из-за этого падают test_ncd_faults, test_ipv6_sockets и test_route_connectivity до проверки своей логики.
|
||||
Предусмотреть ясную предварительную диагностику/подготовленный отдельный namespace без изменения сети хоста.
|
||||
Все три проверки и полный набор201/201 проходят в таком namespace; пропуски не требуются.
|
||||
Подтверждение: /tmp/stream-info-expiry-host-ipv6.log и /tmp/stream-info-expiry-fix-ipv6-env.log.
|
||||
|
||||
[+] **stream: упаковывать помещающийся Opus без обязательного резерва под видео** — исправлено и проверено 26.10.2026.
|
||||
Без ожидающего видео используется вся ёмкость пачки, включая точное заполнение.
|
||||
|
||||
Reference in new issue
Block a user