Co to znamená
Dva servery Majordomus ve stejné síti, stejné verze, se stejnými důvěryhodnými klíči — jeden slouží repozitáři X, druhý repozitáři Y — slyší navzájem svá oznámení a mohou se vzájemně uvádět jako pozorované uzly. Nikdy se nepropojí: každý hello se odmítne jako repository_mismatch, odmítnutí je uvedeno na obou stranách a žádná relace, nárok, předávka ani recenze jednoho repozitáře se k druhému nedostane. Server repozitáře X na jiném stroji se propojí.
Princip
Mesh identita repozitáře se odvozuje z jeho kořenových commitů — obsahu, který sdílí každý klon a žádný nesouvisející repozitář — nebo se deklaruje jako cooperation.repository v deklaraci mesh, a nikdy z cesty, adresy ani názvu hostitele (apps/majordomus-cli/src/mesh/repository.rs). Handshake porovnává identity v obou směrech a každá událost nese identitu svého repozitáře, takže událost jiného repozitáře je odmítnuta při příjmu, i když ji něco přeposlalo.
Jak to vidět
majordomus mesh doctor # the repository check names this runtime's identity
curl http://127.0.0.1:8741/api/v1/mesh/cooperation | jq '.repository, .refused'
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mesh_cooperation runtimes_of_different_repositories
two_clones_at_different_paths_are_one_repository_and_another_is_not dokazuje identitu; runtimes_of_different_repositories_never_link_and_say_why dokazuje izolaci mezi dvěma procesy serveru; test/mesh-lab/run (scénář repository_isolation) ji dokazuje mezi oddělenými linuxovými uzly, které se navzájem objevily přes multicast.
Co nepokrývá
Fork sdílí kořenové commity svého původu a pro mesh je tímž repozitářem, pokud jedna ze stran nedeklaruje vlastní cooperation.repository. Mělký klon nemá spolehlivý kořen a musí ho deklarovat; doctor to hlásí.
Proč existuje
Lokální síť běžně obsahuje servery několika repozitářů. Spolupráce, která by ve výchozím stavu překračovala hranice repozitářů, by nechala nároky jednoho projektu blokovat práci jiného a předávala kontext jednoho projektu relacím jiného.