Document REQUEST acknowledgment before external transaction commit

This commit is contained in:
evgeny committed 2026-10-27 00:55:13 +01:00
1 parent ef8e8f2cb5
commit 9f7ceb5815
2 files changed
+11 -2

No files matched your search

+8 -1
View File
@@ -136,7 +136,14 @@ REQUEST=1, REQUEST_ACK=2, GRANT=3, DENY=4, RESULT_ACK=5
ответ только от автора, по своему существующему запросу и точной идентичности
контейнера. Конфликтующие ключи и результаты отклоняются.
REQUEST_ACK отправляется после сохранения запроса. GRANT/DENY появляются
Приём REQUEST пока использует SAVEPOINT: REQUEST_ACK и событие следуют после RELEASE.
Без внешней транзакции это фиксирует запрос. Внутри внешней транзакции подтверждение
может уйти до commit: последующий rollback удаляет запрос у автора, а получатель уже
перешёл в state=1 и удалил REQUEST из outbox. Ожидание сохраняется после restart автора
при живых маршрутах. Этот отдельный дефект приёма ещё не исправлен;
доказательства — [chat_audit_findings.txt](chat_audit_findings.txt), «Аудит приёма REQUEST».
GRANT/DENY появляются
в outbox в одной собственной BEGIN IMMEDIATE/COMMIT с решением автора. Проверка прав
также выполняется внутри неё. Изменяется ровно один входящий запрос в state=0;
уже принятое решение повторной командой не заменяется. Общий помощник записи outbox
+3 -1
View File
@@ -6,7 +6,9 @@
* Ответы REQUEST_ACK/GRANT/DENY/RESULT_ACK атомарно меняют ключ, запрос и outbox собственной транзакцией.
* Внешняя транзакция для ответов запрещена. GRANT/DENY подтверждаются только после проверенного commit;
* повтор с тем же результатом допустим, конфликтующий ключ/решение отклоняется. Отказ SQL сохраняет прежнее состояние.
* Незавершённый rollback отключает модуль и запрашивает остановку ядра владельцем вне callback. */
* Незавершённый rollback отключает модуль и запрашивает остановку ядра владельцем вне callback.
* Известное ограничение приёма REQUEST: вложенный SAVEPOINT допускает ACK/событие до commit внешней транзакции;
* её rollback теряет уже подтверждённый запрос. См. doc/chat_audit_findings.txt, «Аудит приёма REQUEST». */
#ifndef CHAT_ATTACHMENT_H
#define CHAT_ATTACHMENT_H
#include "../media_async/attachment.h"