Document committed outbox retries and transaction-safe preparation recovery

This commit is contained in:
evgeny committed 2026-10-27 03:20:41 +01:00
1 parent 0995a1eac3
commit 8fefd510a6
2 files changed
+14 -1

No files matched your search

+13
View File
@@ -168,6 +168,17 @@ SQL-ошибка сохраняет все записи и файлы; сете
Если rollback не закрыл собственную транзакцию, таймер не запускается повторно:
модуль снимается и владелец останавливает ядро после poll.
Перед каждой сетевой попыткой очередь собственной транзакцией проверяет команду и
фиксирует `retry_at=now+5с`. Только после commit выполняются проверка допуска и сеть;
SQL-отказ сохраняет команду/дату и не отправляет пакет. За проход обрабатываются до16
команд, периодический tick —10с. Пустая очередь освобождает свою транзакцию без
вызова commit hook. Отсутствие маршрута, backpressure и отказ отправки сохраняют очередь.
Очистка неподтверждённых подготовок выполняется до workers и после их завершения.
Если SQLite-транзакция открыта, весь recovery откладывается, файлы сохраняются:
незакоммиченное удаление истории не доказывает отсутствие публикации. Инициализация
модуля также отклоняет внешнюю транзакцию до изменения таблиц/таймера/сети.
В шапке desktop-клиента кнопка «Запросы расшифровки» видна при наличии запросов без решения
и показывает их число.
Список содержит участника, вложение, дату и отдельные кнопки выдачи/отказа.
@@ -273,6 +284,8 @@ prepare/bind/step/finalize удаления метаданных; дополни
Дополнительные проверки:13 SQL-отказов привязки авторской пары,25 наблюдения новой/существующей
идентичности и60 операций wanted/downloaded. Сверяются все поля через независимый reader,
в том числе в событии; старые ключи/метаданные/соседняя запись сохраняются.
Открытое удаление истории при shutdown сохраняет опубликованные файлы; rollback и
restart восстанавливают прежний снимок. Внешняя транзакция также запрещает повторный init.
Проверяются канонический UUID,коллизия/внешняя транзакция/commit veto/ABORT/IGNORE,
повторная ошибка в отделённом batch,восстановление при startup без сети и17 каналов
с fallback после заполнения очереди16. Ручной обработчик передаёт все23 подписанных
+1 -1
View File
@@ -12,7 +12,7 @@
* Исходящий REQUEST сохраняется собственной транзакцией request+outbox после повторной проверки состояния.
* Уведомление/отправка следуют после commit; внешняя транзакция откладывает весь проход файлов и очереди.
* Перед сетевой попыткой отдельно фиксируется retry_at; отказ SQL не отправляет команду и сохраняет очередь/дату.
* Пустая очередь завершает свою транзакцию без commit hook. Повтор — через5с, за проход не более16 команд.
* Пустая очередь завершается без commit hook. retry_at отодвигается на5с; tick каждые10с, до16 команд за проход.
* Расшифровка стартует после commit decrypting=1. До commit метаданных завершение остаётся у модуля:
* таймер повторяет SQL без нового worker; не более 16 активных/ожидающих завершения файлов на instance.
* quiesce останавливает повторы, destroy после workers освобождает также отложенные завершения.