From 23d426fd0c85723d3f7962af86d4e809fdfad41b Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 23 Oct 2026 12:32:56 +0200 Subject: [PATCH] Document fail-fast OOM and session interruption contracts --- src/transport_layer/etcp_api.h | 2 ++ src/transport_layer/pkt_normalizer.h | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/transport_layer/etcp_api.h b/src/transport_layer/etcp_api.h index 03d16d31..61912567 100644 --- a/src/transport_layer/etcp_api.h +++ b/src/transport_layer/etcp_api.h @@ -6,6 +6,8 @@ * Для доставки через промежуточные узлы используется etcp_router.h. * Все вызовы — в потоке uasync. Перед отправкой ждать UP и свободной send_input_q. * Владение entry различается: send забирает его только при успехе, recv — всегда. + * Принятие send и транспортный ACK не гарантируют завершение операции сервиса через REINIT/DELETE: + * сброс отбрасывает старый поток, владелец завершает/повторяет свои неподтверждённые операции. */ #ifndef ETCP_API_H diff --git a/src/transport_layer/pkt_normalizer.h b/src/transport_layer/pkt_normalizer.h index f3ffbb6f..a006044f 100644 --- a/src/transport_layer/pkt_normalizer.h +++ b/src/transport_layer/pkt_normalizer.h @@ -2,7 +2,11 @@ * input принимает целые кодограммы, packer добавляет длину и делит поток под MTU; * unpacker читает etcp->output_queue и выдаёт целые кодограммы в output/etcp_int_recv. * Содержимое cmd сервисов непрозрачно для normalizer. Контекст принадлежит ETCP_CONN, - * владеет своими очередями/частичными буферами/ожиданием backpressure; все вызовы — uasync. */ + * владеет своими очередями/частичными буферами/ожиданием backpressure; все вызовы — uasync. + * OOM после принятия данных аварийно сбрасывает всю ETCP-сессию, сохраняя физические линки. + * Старые данные не повторяются: владельцы после REINIT восстанавливают операции своего протокола. + * RX до сохранения в ETCP.recv_q может быть отброшен без ACK для обычного ретрансмита. + * Обработчики прекращают старый разбор после reset/close из callback; дополнительные OOM-очереди/таймеры не используются. */ #ifndef PKT_NORMALIZER_H #define PKT_NORMALIZER_H @@ -62,7 +66,8 @@ struct PKTNORM* pn_init(struct ETCP_CONN* etcp);// все что нужно (в // Деинициализация пары void pn_deinit(struct PKTNORM* pn); -// Сброс состояния (для переподключения) +// Отбросить обе очереди/частичные буферы, отменить flush и waiter без выделений памяти. NULL допустим. +// Вызывается владельцем при сбросе ETCP-потока; не запускает согласование эпох и не воспроизводит данные. void pn_reset(struct PKTNORM* pn); // Сброс состояния unpacker (для unpacker)