52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
|
|
@startuml
|
||
|
|
title Indexer — Pair A résout Pair B (GetPeerRecord + handleNodeGet)
|
||
|
|
|
||
|
|
participant "NATS A" as NATSA
|
||
|
|
participant "DB Pair A (oc-lib)" as DBA
|
||
|
|
participant "Node A" as NodeA
|
||
|
|
participant "IndexerService (partagé)" as Indexer
|
||
|
|
participant "DHT Kademlia" as DHT
|
||
|
|
participant "NATS A (retour)" as NATSA2
|
||
|
|
|
||
|
|
note over NodeA: Déclenché par : NATS PB_SEARCH PEER\nou 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\nsinon 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,\nSearchAttr:"peer_id"})
|
||
|
|
NATSA2 -> DBA: Upsert Peer B dans DB A
|
||
|
|
DBA --> NATSA2: ok
|
||
|
|
end
|
||
|
|
|
||
|
|
NodeA --> NodeA: []*peer.Peer → [Peer B]
|
||
|
|
|
||
|
|
@enduml
|