Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Runtime, který přestane vysílat tep — zhroutil se, byl zabit nebo oddělen sítí — vyprší u svých peerů v deklarované lhůtě, jeho nároky přestanou vylučovat a jeho restart se znovu připojí jako týž runtime bez duplikátu

Přítomnost je aktuální, nikdy ne „jednou viděno dnes ráno“. Runtime ukončený bez vypnutí

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Serverový proces se zabije signálem SIGKILL a znovu se spustí ve stejném checkoutu; jeho peer jej uvádí jednou s počítanými restarty a claim jeho předchozího běhu zůstává vypršelý. Beats stárnou na vlastních monotónních hodinách každého runtime. Laboratoř to opakuje s docker kill a odpojením sítě.

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.

Detail vykreslen z docs/claims/mesh-liveness-expiry.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Runtime, který přestane vysílat tep — zhroutil se, byl zabit nebo oddělen sítí — vyprší u svých peerů v deklarované lhůtě, jeho nároky přestanou vylučovat a jeho restart se znovu připojí jako týž runtime bez duplikátu

    Vytvořeno na Mesh.

  2. 2 · kanonické tvrzení

    mesh-liveness-expirydeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/MESH.md

  3. 3 · implementace

    apps/majordomus-cli/src/mesh/cooperation.rs

  4. 4 · test a scénáře

    Test: apps/majordomus-cli/tests/mesh_cooperation.rs

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh apps/majordomus-cli/tests/mesh_cooperation.rs

Související tvrzení stejná implementace

Prohledává názvy a popisy všech stránek, které tento web publikuje.