Pass + Doc
This commit is contained in:
49
docs/diagrams/05_indexer_get.mmd
Normal file
49
docs/diagrams/05_indexer_get.mmd
Normal file
@@ -0,0 +1,49 @@
|
||||
sequenceDiagram
|
||||
title Indexer — Pair A résout Pair B (GetPeerRecord + handleNodeGet)
|
||||
|
||||
participant NATSA as NATS A
|
||||
participant DBA as DB Pair A (oc-lib)
|
||||
participant NodeA as Node A
|
||||
participant Indexer as IndexerService (partagé)
|
||||
participant DHT as DHT Kademlia
|
||||
participant NATSA2 as NATS A (retour)
|
||||
|
||||
Note over NodeA: Déclenché par : NATS PB_SEARCH PEER<br/>ou callback SubscribeToSearch
|
||||
|
||||
NodeA->>DBA: NewRequestAdmin(PEER).Search(DID_B ou PeerID_B)
|
||||
DBA-->>NodeA: Peer B local (si connu) → résout DID_B + PeerID_B<br/>sinon utilise la valeur brute
|
||||
|
||||
loop Pour chaque StaticIndexer
|
||||
NodeA->>Indexer: TempStream /opencloud/record/get/1.0
|
||||
NodeA->>Indexer: json.Encode(GetValue{Key: DID_B, PeerID: PeerID_B})
|
||||
|
||||
Indexer->>Indexer: key = "/node/" + DID_B
|
||||
Indexer->>DHT: SearchValue(ctx 10s, "/node/"+DID_B)
|
||||
DHT-->>Indexer: channel de bytes (PeerRecord B)
|
||||
|
||||
loop Pour chaque résultat DHT
|
||||
Indexer->>Indexer: Unmarshal → PeerRecord B
|
||||
alt PeerRecord.PeerID == PeerID_B
|
||||
Indexer->>Indexer: resp.Found=true, resp.Records[PeerID_B]=PeerRecord B
|
||||
Indexer->>Indexer: StreamRecord B.LastSeen = now (si heartbeat actif)
|
||||
end
|
||||
end
|
||||
|
||||
Indexer->>NodeA: json.Encode(GetResponse{Found:true, Records:{PeerID_B: PeerRecord B}})
|
||||
end
|
||||
|
||||
loop Pour chaque PeerRecord retourné
|
||||
NodeA->>NodeA: rec.Verify() → valide signature de B
|
||||
NodeA->>NodeA: rec.ExtractPeer(ourDID_A, DID_B, pubKey_B)
|
||||
|
||||
alt ourDID_A == DID_B (c'est notre propre entrée)
|
||||
Note over NodeA: Republier pour rafraîchir le TTL
|
||||
NodeA->>Indexer: publishPeerRecord(rec) [refresh 2 min]
|
||||
end
|
||||
|
||||
NodeA->>NATSA2: SetNATSPub(CREATE_RESOURCE, {PEER, Peer B JSON,<br/>SearchAttr:"peer_id"})
|
||||
NATSA2->>DBA: Upsert Peer B dans DB A
|
||||
DBA-->>NATSA2: ok
|
||||
end
|
||||
|
||||
NodeA-->>NodeA: []*peer.Peer → [Peer B]
|
||||
Reference in New Issue
Block a user