Files
oc-discovery/docs/diagrams
2026-03-09 14:57:41 +01:00
..
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-02-24 14:31:37 +01:00
2026-02-24 14:31:37 +01:00
2026-02-24 14:31:37 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00
2026-03-09 14:57:41 +01:00

OC-Discovery — Diagrammes d'architecture et de séquence

Tous les fichiers sont au format PlantUML. Rendu possible via VS Code (extension PlantUML), IntelliJ, ou plantuml.com/plantuml.

Diagrammes de séquence (flux internes)

Fichier Description
01_node_init.puml Initialisation complète d'un Node (libp2p host, GossipSub, indexers, StreamService, PubSubService, NATS)
02_node_claim.puml Enregistrement du nœud auprès des indexeurs (claimInfo + publishPeerRecord)
03_indexer_heartbeat.puml Protocole heartbeat avec score 5 composants (U/B/D/L/F), UptimeTracker, dynamicMinScore
04_indexer_publish.puml Publication d'un PeerRecord vers l'indexeur → DHT
05_indexer_get.puml Résolution d'un pair via l'indexeur (GetPeerRecord + handleNodeGet + DHT)
06_native_registration.puml Enregistrement d'un indexeur auprès du Native (FillRate, signature, TTL 90s, unsubscribe)
07_native_get_consensus.puml ConnectToNatives : fetch pool + Phase 1 (clientSideConsensus) + Phase 2 (indexerLivenessVote)
08_nats_create_resource.puml Handler NATS CREATE_RESOURCE : connexion/déconnexion d'un partner
09_nats_propagation.puml Handler NATS PROPALGATION_EVENT : delete, considers, planner, search
10_pubsub_search.puml Recherche gossip globale (type "all") via GossipSub
11_stream_search.puml Recherche directe par stream (type "known" ou "partner")
12_partner_heartbeat.puml Heartbeat partner + propagation CRUD vers les partenaires
13_planner_flow.puml Session planner (ouverture, échange, fermeture)
14_native_offload_gc.puml Boucles background du Native Indexer (offload, DHT refresh, GC)

Diagrammes de topologie et flux de panne

Configurations réseau

Fichier Description
15_archi_config_nominale.puml C1 — Topologie nominale : 2 natifs · 2 indexeurs · 2 nœuds, tous flux
16_archi_config_seed.puml C2 — Mode seed sans natif : indexeurs à AdmittedAt=0, risque D20 actif

Flux de démarrage

Fichier Description
17_startup_consensus_phase1_phase2.puml Démarrage nominal : Phase 1 (admission native) + Phase 2 (liveness vote)
18_startup_seed_discovers_native.puml Upgrade seed → nominal : goroutine async découvre un natif via l'indexeur

Flux de panne

Fichier Code Description
19_failure_indexer_crash.puml F1 Panne 1 indexeur → replenish depuis natif → IC admis
20_failure_both_indexers_selfdelegate.puml F2 Panne 2 indexeurs → natif IsSelfFallback=true, runOffloadLoop
21_failure_native_one_down.puml F3 Panne 1 natif → quorum 1/1 suffisant, mode dégradé
22_failure_both_natives.puml F4 Panne 2 natifs → fallback pool pré-validé, retryLostNative
23_failure_native_plus_indexer.puml F5 Panne combinée : 1 natif + 1 indexeur → double replenish
24_failure_retry_lost_native.puml F6 Panne réseau transitoire → retryLostNative (30s ticker)
25_failure_node_gc.puml F7 Crash nœud → GC indexeur (120s), AfterDelete, fill rate recalculé

Protocoles libp2p utilisés (référence complète)

Protocole Description
/opencloud/heartbeat/1.0 Heartbeat universel : node→indexeur, indexeur→native, native→native (long-lived)
/opencloud/probe/1.0 Sonde de bande passante (echo, mesure latence + débit)
/opencloud/resource/heartbeat/partner/1.0 Heartbeat node ↔ partner (long-lived)
/opencloud/record/publish/1.0 Publication PeerRecord vers indexeur
/opencloud/record/get/1.0 Requête GetPeerRecord vers indexeur
/opencloud/native/subscribe/1.0 Enregistrement indexeur auprès du native (+ FillRate)
/opencloud/native/unsubscribe/1.0 Désenregistrement explicite indexeur → native
/opencloud/native/indexers/1.0 Requête de pool d'indexeurs au native (tri par w(F)=F×(1-F))
/opencloud/native/consensus/1.0 Phase 1 : validation de pool d'indexeurs (vote majoritaire natifs)
/opencloud/native/peers/1.0 Demande de pairs natifs connus (replenish mesh natif)
/opencloud/indexer/natives/1.0 Demande d'adresses de natifs connus par un indexeur
/opencloud/indexer/consensus/1.0 Phase 2 : liveness vote (LastSeen ≤ 120s && LastScore ≥ 30)
/opencloud/resource/search/1.0 Recherche de ressources entre peers
/opencloud/resource/create/1.0 Propagation création ressource vers partner
/opencloud/resource/update/1.0 Propagation mise à jour ressource vers partner
/opencloud/resource/delete/1.0 Propagation suppression ressource vers partner
/opencloud/resource/planner/1.0 Session planner (booking)
/opencloud/resource/verify/1.0 Vérification signature ressource
/opencloud/resource/considers/1.0 Transmission d'un "considers" d'exécution