Co to znamená
Přítomnost je aktuální, nikdy ne „jednou viděno dnes ráno“. Runtime ukončený bez vypnutí nic neuvolní, přesto do cooperation.expiry_seconds je jeho spojení na každém peeru expired, jeho relace jsou expired a jeho výhradní claimy už nikoho neodmítají. Když se restartuje ve stejném checkoutu se stejným klíčem uzlu, je to tentýž runtime — jeho nová instance — a znovu se připojí: jeho peery jej uvedou jednou, s restarts započítanými, a claimy jeho předchozího běhu zůstanou vypršené, místo aby ožily.
Princip
Při každém heartbeatu runtime zvýší svůj vlastní tep; synchronizační kola přenášejí tep každého proudu s údajem, jak dávno jej odesílatel viděl stoupnout, takže živost se počítá na vlastních monotónních hodinách každého runtime a nikdy se neporovnávají hodiny dvou strojů (apps/majordomus-cli/src/mesh/journal.rs). Linka bez výměny po polovinu expirace je unreachable, po expiraci expired a zahozena; volající couvá exponenciálně, s limitem na expiraci, a pozdraví znovu, když peer odpoví (apps/majordomus-cli/src/mesh/cooperation.rs). Znovu načtený žurnál obnoví události, ale ne čerstvost, takže nic není živé, dokud znovu nezatepe.
Jak to vidět
majordomus mesh peers # link state and "beat Ns ago" per runtime
curl 'http://127.0.0.1:8741/api/v1/mesh/state?view=full' | jq '.streams'
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mesh_cooperation a_killed_runtime
a_killed_runtime_expires_and_its_restart_reconnects_as_the_same_runtime zabije serverový proces signálem SIGKILL a restartuje ho; test/mesh-lab/run (scénáře process_crash_recovery a network_partition) zabije kontejner a odpojí jeden od sítě.
Co nepokrývá
Vypršení je omezeno deklarovaným vypršením plus jedním heartbeatem na každý relay hop; není okamžité. Runtime, který žije, ale je nedosažitelný z jednoho peera a dosažitelný z jiného, zůstává díky relay živý, a to záměrně.
Proč existuje
Tvrzení, které přežije svého držitele, blokuje práci navždy; tvrzení uvolněné vypršením časového limitu na jednom stroji, ale ne na jiném, jsou dvě pravdy. Živost z tepů, které vyprší na hodinách každého runtime, je to, co způsobí, že tvrzení mrtvého držitele skončí všude, aniž je kdokoli uvolňuje.