Explain per-record fallback and concurrent synchronization in public headers

This commit is contained in:
evgeny committed 2026-11-04 00:58:51 +01:00
1 parent 8b3fb5f137
commit fc6dc6a93b
2 files changed
+8 -5

No files matched your search

+7 -4
View File
@@ -8,7 +8,7 @@
* Сетевые адреса принадлежат topo_node и не входят в блок участника.
* Модуль живёт внутри чат-сервиса; все операции и callbacks — в потоке uasync.
*
* Согласованная схема отложенной проверки (ещё не реализована):
* Как принимается состав группы:
* Отправитель проверяет, можно ли этому узлу получить состав данной группы.
* Получатель сохраняет новые версии в той же таблице с пометкой «не проверена»,
* связывая их с прежними проверенными записями. Пока идёт обмен, сервисы используют
@@ -16,11 +16,14 @@
* Когда состав получен, узел проверяет подписи, цепочки приглашений, правила группы
* и собственное право пользоваться данными. Затем одной транзакцией принимает
* проверенные версии и пересчитывает права. Для неверной новой версии сохраняется
* прежняя, если она всё ещё действительна; если обе неверны, удаляются обе.
* прежняя, если она всё ещё действительна; если обе неверны, удаляются обе версии
* только этого участника. Исключение самого узла не удаляет весь состав группы.
* Подписанный отзыв прав сохраняется: он не позволяет вернуть старые права из бэкапа.
* Недостающий ключ или ошибка проверки — повод отложить решение, а не удалить запись.
* При обрыве обмена прежние записи остаются; завершение старого обмена не затирает
* более свежие проверенные изменения. Уведомления сервисам идут после commit.
* У каждого параллельного обмена свой sync_id: отмена одного не затрагивает другие.
* При завершении бэкап берётся с актуальной записи: старый обмен не затирает
* более свежие проверенные изменения. При обрыве прежние записи остаются;
* после перезапуска незавершённые версии убираются. Уведомления идут после commit.
*/
#ifndef MEMBER_SYNC_H
+1 -1
View File
@@ -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);