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.

Nic, co klient zanechá, nezamkne jiného klienta

Nic, co klient zanechá, nezamkne jiného klienta

majordomus://rule/project.shared-server-resilience@1aktivní rustmcpodolnost

odkazuje na

odkazuje na něj

Zdůvodnění

Sdílený server je jediný proces, na kterém závisí několik klientů, a jeho jediným sdíleným stavem je jeden soubor lease pod lokální polovinou vrstvy v checkoutu. Cokoli, co v něm může po pádu, ukončení procesu nebo zkopírování checkoutu zůstat, je způsob, jak jeden klient zamkne ostatní, a repozitář, jehož lokální polovina odmítá zápisy, by jinak odmítl každého klienta. Návrh démona odmítá; na oplátku dluží, že proces, který klient spustil, nikdy neselže v obsluze tohoto klienta kvůli tomu, co po sobě nechal jiný proces.

Požadované chování

Pod apps/majordomus-cli/:

  • Volba čte lease při každém pokusu a klasifikuje ho. K serveru, který odpovídá za tento kořen, se připojí. Lease, jehož server neodpovídá, soubor, který není dokumentem leasu, prázdný soubor a lease, jehož vlastník nepublikoval žádné URL v rámci bind grace, se každý převezme a log říká který. Na lease bez URL, který je mladší než grace, se čeká. Pokus je omezen časem, nikdy počtem kol.
  • Když nelze lease vytvořit, připojit se k němu ani ho nahradit, nebo se nedá spustit sdílený server, majordomus mcp obslouží svého klienta samostatně, jako to dělá --standalone, a zaloguje cannot use the shared server s cestou a důvodem. Vlastní chyby vrstvy (žádný manifest, --strict odmítající degradovaný index) stále končí svými kódy: degradace se týká sdílení, nikdy vrstvy.
  • Most, jehož server zmizel, volí znovu při své další zprávě; když nemůže ani poskytovat, ani se připojit, platí tentýž degrade dřív, než k nějaké chybě dojde u klienta.
  • SIGTERM, SIGINT a SIGHUP odstraní lease dřív, než proces signálem zemře. kill -9 nelze zachytit; zastaralý lease, který zanechá, spadá pod první bod.
  • Server, jehož vlastník odešel, končí s poslední připojenou relací; relace HTTP, která se nikdy nerozloučí, vyprší při časovém limitu nečinnosti, takže server nepřežije své klienty o víc než tento limit.
  • Server, jehož lease byl převzat, přestane jednat jako server checkoutu a řekne to dřív, než se kdokoli musí ptát podruhé. Jeho index odpovídá leaseholder: false; sonda, kterou prochází každý čtenář zapamatované adresy, ho odmítne; nové initialize je odmítnuto s důvodem a s tím, kde je aktuální server; a jeho vlastní zpráva o zdraví říká, že to, co popisuje, je jiný proces. Relace, které už měl, pokračují a proces s nimi skončí — klient uprostřed odpovědi nepřijde o server jen proto, že někdo znovu sestavil spustitelný soubor. Co nesmí nikdy udělat, je převzít klienta, který mohl mít ten skutečný: takový klient dostane nástěnku peerů, historii provádění a generaci vrstvy, které žádný jiný klient checkoutu nevidí, a žádná odpověď to neříká.
  • Launcher, který klient spouští (bin/majordomus-cli mcp), nikdy neodmítne klienta pro nedostatek executable, který mohl spustit. Když tento checkout žádný nemá nebo jej nemůže sestavit (žádný cargo, méně volného místa než práh buildu, selhaný build), spustí nainstalovaný release a na stderr pojmenuje release a důvod; jakýkoli jiný příkaz si ponechá exit 12, zastaralý executable, který lze přebudovat, se přebuduje a soubor uvnitř repozitáře nebo ten, který neodpovídá na --version, se nikdy nepovažuje za nainstalovaný release (ADR 0172).
  • Navázání na adresu, která není loopback, se servíruje s varováním, které pojmenovává, co vystavuje.
  • Přemostěná relace a restartovaný server odpovídají bajt po bajtu stejně jako lokální relace.

Každý bod výše dokládá pojmenovaný případ v tests/mcp_shared.rs, v tests/lease_lost.rs nebo v test/cases/90_mcp_shared_server.sh a změna kteréhokoli z nich přistává se svým případem.

Chování při selhání

CI selže: cargo test spouští tests/mcp_shared.rs v jobu rust a test/run.sh spouští případ 90 v jobech test a pages. Recenzent odmítne změnu leasu, volby, failoveru mostu nebo zpracování signálů, která nepřichází se svým případem, a stránku tvrzení pro mcp-lease-resilience, jejíž test už nejmenuje dané chování.

Ověření

RUSTFLAGS='' cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mcp_shared, RUSTFLAGS='' cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test lease_lost, bash test/run.sh 90_mcp_shared_server, bash test/run.sh 3177_a_client_always_gets_a_server, scripts/rust-check a tvrzení mcp-lease-resilience a mcp-client-always-served v docs/CLAIMS.yaml.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/shared-server-resilience.v1.md
identity
project.shared-server-resilience@1
dostupné také jako
Zdroj MCP majordomus://rule/project.shared-server-resilience@1 · majordomus entity show rule/project-shared-server-resilience-1 · GET /api/v1/entity?uri=majordomus://rule/project.shared-server-resilience@1
v Cockpitu
/cockpit/objects/rule/project-shared-server-resilience-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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