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.

Slovník událostí ledgeru je uzavřený, na vstupu i na výstupu

share/events.yaml deklaruje každý název události, který ledger přijímá, příkaz, který zapisuje

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

share/events.yaml deklaruje každý název, příkaz, který ho vysílá, a povinné klíče jeho obsahu. Neregistrovaný název je odmítnut při zápisu, odmítnut jako filtr historie a ohlášen příkazem history --validate, pokud je už uložen.

Co to znamená

share/events.yaml deklaruje každý název události, který ledger přijímá, příkaz, který ji zapisuje, a klíče payloadu, které musí nést. Zápis neregistrovaného názvu je odmítnut. Filtrování podle něj je odmítnuto. Uložený řádek, který jej nese, je nahlášen.

Toto je vlastní pravidlo repozitáře — neznámý konfigurační klíč je chyba — aplikované na jeho vlastní trvalé záznamy, které byly dosud od něj vyňaty.

Princip

mj_ledger_append načte registr a odmítne dvě věci jako vnitřní chyby: jméno, které registr nedeklaruje, a registrované jméno, jehož payload postrádá klíč, který ten záznam vyžaduje. Jsou to vnitřní chyby, a ne zjištění, protože příkaz zapisující událost, kterou slovník nedefinuje, je chyba v Majordomus, a ne fakt o dohlíženém repozitáři.

history --event <name> odmítne neregistrované jméno místo odpovědi „žádné odpovídající události“, což je odpověď, kterou by dalo i registrované jméno, které nenastalo; filtr, který tyto dvě věci nerozliší, není filtr. history --validate hlásí každý uložený řádek, jehož jméno nezná žádný čtenář.

test/cases/33_event_registry.sh drží čtyři věci vůči sobě: registr, místa volání mj_ledger_append, vykreslení v lib/history.sh a tabulku v docs/SCHEMAS.md. Jméno v kterékoli z nich, které chybí v ostatních, způsobí selhání.

Názvy jsou zaregistrovány přesně tak, jak už byly napsány, včetně nekonzistentních. Přejmenování by rozbilo každý existující ledger, včetně vlastního ledgeru tohoto repozitáře, a čtenář, který tiše vynechá vše před přejmenováním, je horší než nekonzistentní název.

Jak to vidět

majordomus history --event task.startd     # exit 2, and lists the names that exist
majordomus history --validate              # exit 10 on a line no reader recognises
sed -n 's/^  - id: //p' share/events.yaml

Co nepokrývá

Validace payloadu kontroluje, že povinný klíč je přítomen, ne že jeho hodnota dává smysl. Události zapsané před vznikem registru se nemigrují — nemusí, protože registr deklaruje názvy, které se už používaly.

Odmítnuté finish se stále nezaznamenává. Přijaté dokončení se zapíše a odmítnutí nezanechá stopu, takže úloha odmítnutá čtyřikrát je v ledgeru nerozlišitelná od té, která prošla napoprvé. To je chybějící událost, ne neověřená, a test/cases/32_refusal_lifecycle.sh nese tvrzení, které bude platit, až bude existovat.

Proč existuje

mj_ledger_append přijímal libovolný řetězec. Překlepnutý název vyrobil trvalý záznam jen pro připojování, který každý čtenář tiše přeskakoval — nejhorší druh selhání u záznamu, jehož účelem je umožnit někomu rekonstruovat, co se stalo. docs/SCHEMAS.md dokumentoval událost bootstrap s polem reason už od doby, kdy kniha neměla čtenáře, a nic ji nikdy nezapsalo.

Detail vykreslený z docs/claims/event-vocabulary.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Slovník událostí ledgeru je uzavřený, na vstupu i na výstupu

    Vytvořeno na Provenance, State.

  2. 2 · kanonické tvrzení

    event-vocabularydeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    lib/common.sh

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

    Test: test/cases/33_event_registry.sh

    Provedeno v Přečíst zpět, co se stalo, a držet ledger v mezi, Zaznamenat rozhodnutí, aby ho další worker našel, Zaznamenat, co jeden worker udělal při jednom sezení.

  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 33_event_registry

Kde se toto tvrzení používá

Související tvrzení stejná implementace

Okamžiky, na které to odpovídá

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