From fc6dc6a93b3a542a4860c8032c242f7f6ae219aa Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 4 Nov 2026 00:58:51 +0100 Subject: [PATCH] Explain per-record fallback and concurrent synchronization in public headers --- src/chat/member_sync.h | 11 +++++++---- src/chat/merkle_sync.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/chat/member_sync.h b/src/chat/member_sync.h index b06c6ca4e..b4bc45582 100644 --- a/src/chat/member_sync.h +++ b/src/chat/member_sync.h @@ -8,7 +8,7 @@ * Сетевые адреса принадлежат topo_node и не входят в блок участника. * Модуль живёт внутри чат-сервиса; все операции и callbacks — в потоке uasync. * - * Согласованная схема отложенной проверки (ещё не реализована): + * Как принимается состав группы: * Отправитель проверяет, можно ли этому узлу получить состав данной группы. * Получатель сохраняет новые версии в той же таблице с пометкой «не проверена», * связывая их с прежними проверенными записями. Пока идёт обмен, сервисы используют @@ -16,11 +16,14 @@ * Когда состав получен, узел проверяет подписи, цепочки приглашений, правила группы * и собственное право пользоваться данными. Затем одной транзакцией принимает * проверенные версии и пересчитывает права. Для неверной новой версии сохраняется - * прежняя, если она всё ещё действительна; если обе неверны, удаляются обе. + * прежняя, если она всё ещё действительна; если обе неверны, удаляются обе версии + * только этого участника. Исключение самого узла не удаляет весь состав группы. * Подписанный отзыв прав сохраняется: он не позволяет вернуть старые права из бэкапа. * Недостающий ключ или ошибка проверки — повод отложить решение, а не удалить запись. - * При обрыве обмена прежние записи остаются; завершение старого обмена не затирает - * более свежие проверенные изменения. Уведомления сервисам идут после commit. + * У каждого параллельного обмена свой sync_id: отмена одного не затрагивает другие. + * При завершении бэкап берётся с актуальной записи: старый обмен не затирает + * более свежие проверенные изменения. При обрыве прежние записи остаются; + * после перезапуска незавершённые версии убираются. Уведомления идут после commit. */ #ifndef MEMBER_SYNC_H diff --git a/src/chat/merkle_sync.h b/src/chat/merkle_sync.h index b000f8a66..ce0c5d785 100644 --- a/src/chat/merkle_sync.h +++ b/src/chat/merkle_sync.h @@ -72,7 +72,7 @@ struct merkle_sync_data_ops { * При этом режиме apply_items можно не задавать. */ int (*begin_pull)(void* ctx, const char* ns, uint64_t peer, uint64_t round, void** pull); int (*commit_pull)(void* ctx, void* pull); - /* Необязательное уведомление после commit_pull (также после отказа), на безопасном выходе + /* Необязательное уведомление после успешного commit_pull, на безопасном выходе * из обработчика пакета. Может отменять сессии. Затем abort_pull освобождает контекст. * Позволяет сразу опубликовать принятые изменения, не ожидая обратного прохода. */ void (*publish_pull)(void* ctx, void* pull);