Explain per-record fallback and concurrent synchronization in public headers
This commit is contained in:
1 parent
8b3fb5f137
commit
fc6dc6a93b
2 files changed
+8
-5
No files matched your search
@@ -8,7 +8,7 @@
|
||||
* Сетевые адреса принадлежат topo_node и не входят в блок участника.
|
||||
* Модуль живёт внутри чат-сервиса; все операции и callbacks — в потоке uasync.
|
||||
*
|
||||
* Согласованная схема отложенной проверки (ещё не реализована):
|
||||
* Как принимается состав группы:
|
||||
* Отправитель проверяет, можно ли этому узлу получить состав данной группы.
|
||||
* Получатель сохраняет новые версии в той же таблице с пометкой «не проверена»,
|
||||
* связывая их с прежними проверенными записями. Пока идёт обмен, сервисы используют
|
||||
@@ -16,11 +16,14 @@
|
||||
* Когда состав получен, узел проверяет подписи, цепочки приглашений, правила группы
|
||||
* и собственное право пользоваться данными. Затем одной транзакцией принимает
|
||||
* проверенные версии и пересчитывает права. Для неверной новой версии сохраняется
|
||||
* прежняя, если она всё ещё действительна; если обе неверны, удаляются обе.
|
||||
* прежняя, если она всё ещё действительна; если обе неверны, удаляются обе версии
|
||||
* только этого участника. Исключение самого узла не удаляет весь состав группы.
|
||||
* Подписанный отзыв прав сохраняется: он не позволяет вернуть старые права из бэкапа.
|
||||
* Недостающий ключ или ошибка проверки — повод отложить решение, а не удалить запись.
|
||||
* При обрыве обмена прежние записи остаются; завершение старого обмена не затирает
|
||||
* более свежие проверенные изменения. Уведомления сервисам идут после commit.
|
||||
* У каждого параллельного обмена свой sync_id: отмена одного не затрагивает другие.
|
||||
* При завершении бэкап берётся с актуальной записи: старый обмен не затирает
|
||||
* более свежие проверенные изменения. При обрыве прежние записи остаются;
|
||||
* после перезапуска незавершённые версии убираются. Уведомления идут после commit.
|
||||
*/
|
||||
|
||||
#ifndef MEMBER_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);
|
||||
|
||||
Reference in new issue
Block a user