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.

I2733 — Obnovený průchod mesh.events vrátí každou událost právě jednou, napříč rozdělením sítě

Čtenář, který prochází mesh.events stránku po stránce a po každé odpovědi pokračuje od kurzoru, obdrží každou událost, kterou runtime přijme, právě jednou, včetně události od zapisovatele, který byl od meshe oddělen a označil ji razítkem na pozici, kterou procházení už minulo, nebo pod ní.

PŘIPRAVENO vlna 1 · p2 · profil implementation · bezpečné paralelně

Součást mesh-journal-converges — Žurnál spolupráce je trvalý, konverguje při jakémkoli pořadí doručení a nikdy nenechá zvítězit zastaralý claim.

Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2733 bude přijato.

Cíl

Čtenář, který prochází mesh.events stránku po stránce a po každé odpovědi pokračuje od kurzoru, obdrží každou událost, kterou runtime přijme, právě jednou, včetně události od zapisovatele, který byl od meshe oddělen a označil ji razítkem na pozici, kterou procházení už minulo, nebo pod ní.

Proč

Leaf M02.5.1 (PR #1207, I2140) dokázal, že průchod obnovený z lamportu každé stránky vrátí každou událost jednou, zatímco vlastní události čtenáře a události peerů s razítkem nad pozicí průchodu stále přicházejí (unit testy paging_by_stamp_returns_every_event_exactly_once a paging_while_events_arrive_returns_every_event_exactly_once), a v docs/MESH.md pod 'Paging the raw journal' zdokumentoval jediný příchod mimo tento průchod: runtime odtržený od sítě dál zapisuje s vlastními hodinami Lamport a když se spojení vrátí, jeho události přijdou s razítkem na úrovni kurzoru čtenáře nebo pod ním. events_after filtruje lamport > after (apps/majordomus-cli/src/mesh/journal.rs:2367-2385), takže tyto události se obnovenému průchodu nikdy nevrátí; dostanou se jen do foldu mesh state nebo do průchodu restartovaného z dřívějšího after. Razítko Lamport patří svému zapisovateli, ne pořadí příchodu u čtenáře, takže žádný kurzor s jedním razítkem to nespraví; musí se změnit samotný kurzor.

Aktuální stav

mesh.events odpovídá lamport, razítkem poslední události na stránce, jako dalším after (apps/majordomus-cli/src/capability/builtin/mesh.rs:754-786) a stránka nikdy nekončí uprostřed série stejných razítek. Událost, která dorazí poté, co průchod minul její razítko, v průchodu tiše chybí, bez signálu pro čtenáře. Synchronizace mezi běhy už vyměňuje high-water marks po proudech (Journal::marks, marks_for, missing_for v apps/majordomus-cli/src/mesh/journal.rs:1765-1974); stránkování je nepoužívá.

Cílový stav

Kurzor, který odpovídá mesh.events a který přijímají mesh events --after a /events?after=, jmenuje každou událost, která už byla vrácena, takže obnovený průchod vrátí pozdní událost pod pozicí čtenáře jednou a nikdy žádnou neopakuje; docs/MESH.md tuto záruku uvádí a zrušuje uvedenou mezeru. Návrh se zvolí, až se tento úkol vezme, zaznamená se s důkazy a není zde. Kandidáti: (a) kurzor na zapisovatele, poslední vrácené (stream, seq) na stream, takže stránka vrátí události každého streamu nad jeho vlastním seq; (b) vektor verzí přes streamy, tytéž značky, které už synchronizace vyměňuje, nesený jako neprůhledný token; (c) high-water marks příchodu na runtime, lokální sekvence příchodu, ze které čtenář pokračuje, což drží token malý, ale platí jen proti runtime, který ho vydal. Každý musí uvést mez velikosti tokenu, jak se chová poté, co komprimace zahodí události pod značkou, a zda skalární lamport after zůstane přijat pro stávající čtenáře.

Rozsah

  • apps/majordomus-cli/src/capability/builtin/mesh.rs
  • apps/majordomus-cli/src/mesh/journal.rs
  • apps/majordomus-cli/src/cli/local.rs
  • apps/majordomus-cli/tests/mesh.rs
  • docs/MESH.md

Mimo rozsah

  • fold a digest mesh state, které už konvergují při jakémkoli pořadí doručení
  • Protokol synchronizace a jeho rozpočet značek, které vlastní ostatní úkoly milníku
  • Globální pořadí událostí napříč runtime; průchod je úplný a bez duplicit, ne linearizovatelný

Závislosti

Kritéria přijetí

  • Test reprodukuje mezeru před opravou: dva runtimy, A a B, propojené; čtenář prochází mesh.events runtimu A s malým limitem za razítko B; spojení se přeruší, B připojí událost s lamportem rovným nebo pod kurzorem čtenáře, spojení se obnoví a A ji přijme; pokračování v průchodu od posledního zodpovězeného kurzoru tu událost vrátí
  • Tentýž test s opakovaně obnoveným průchodem a pozdní událostí doručenou také dvakrát vrátí každou událost žurnálu přesně jednou za celý průchod
  • Kurzor, který schéma dokumentuje, je kurzor, který další stránka přijímá v příkazové řádce, přes HTTP i přes MCP
  • docs/MESH.md 'Paging the raw journal' uvádí záruku napříč oddíly a jmenuje test

Validace

  • bin/majordomus plan validate
  • cargo test --test mesh
  • cargo test --lib mesh::journal

Požadované důkazy

  • events_resume_across_partition_test

Důkazy

Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.

Časová osa

zahájeno
—
ověřeno
—
dokončeno
—

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2733.yaml. Načtěte ho zpět pomocí majordomus plan show I2733.

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