Co to znamená
A je propojeno s B a B s C; A a C spolu nikdy nemluví. Claim vytvořený na A je držen na C, claim vytvořený na C odmítne překrývající se claim na A a všechny tři runtimy hlásí stejný digest stavu. Každá událost je uložena jednou na každém runtime — počty jsou shodné — a jakmile se stav sblížil, další heartbeaty nenesou žádné události: replikace se zastaví místo toho, aby se odrážela A → B → A.
Princip
Replikace porovnává high-water marks: kolo synchronizace pošle peeru přesně ty události, které podle jeho značek chybí, po jednotlivých proudech, takže událost dorazí ke každému runtime jednou na spoj a nemá kam dál. Události si zachovávají podpis svého původce přes každé předání, takže C ověřuje klíč A, ne slovo B, a předávající uzel nemůže to, co přeposílá, ani padělat, ani změnit. Duplicitní doručení — možné, když má runtime dvě cesty — rozpozná (stream, seq) a nic nezmění. Skládání nezávisí na pořadí, takže digest závisí jen na množině událostí a verdiktech o živosti (apps/majordomus-cli/src/mesh/journal.rs, apps/majordomus-cli/src/mesh/state.rs).
Jak to vidět
curl http://127.0.0.1:8741/api/v1/mesh/state | jq '.summary.digest' # on each runtime
curl 'http://127.0.0.1:8741/api/v1/mesh/events?limit=1000' | jq '.count'
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mesh_cooperation three_runtimes
three_runtimes_in_a_line_converge_through_the_middle_without_loops spouští tři serverové procesy v řadě; a_relay_carries_events_it_cannot_forge a any_permutation_with_duplicates_converges jsou důkazy jednotkové a vlastnostní; test/mesh-lab/run (scénář three_node_convergence) to opakuje napříč třemi uzly Linuxu.
Co nepokrývá
Doručení je nejméně jednou s idempotentním uplatněním, ne přesně jednou. Konvergence je eventuální: během rozdělení sítě každá strana konverguje k tomu, čeho dosáhne.
Proč existuje
Mesh ověřený se dvěma uzly ověřený není: relé, duplikáty a smyčky se objeví až se třetím.