59 lines
2.0 KiB
Plaintext
59 lines
2.0 KiB
Plaintext
@startuml
|
|
title Node Initialization — Peer A (InitNode)
|
|
|
|
participant "main (Peer A)" as MainA
|
|
participant "Node A" as NodeA
|
|
participant "libp2p (Peer A)" as libp2pA
|
|
participant "DB Peer A (oc-lib)" as DBA
|
|
participant "NATS A" as NATSA
|
|
participant "Indexer (partagé)" as IndexerA
|
|
participant "StreamService A" as StreamA
|
|
participant "PubSubService A" as PubSubA
|
|
|
|
MainA -> NodeA: InitNode(isNode, isIndexer, isNativeIndexer)
|
|
|
|
NodeA -> NodeA: LoadKeyFromFilePrivate() → priv
|
|
NodeA -> NodeA: LoadPSKFromFile() → psk
|
|
|
|
NodeA -> libp2pA: New(PrivateNetwork(psk), Identity(priv), ListenAddr:4001)
|
|
libp2pA --> NodeA: host A (PeerID_A)
|
|
|
|
note over NodeA: isNode == true
|
|
|
|
NodeA -> libp2pA: NewGossipSub(ctx, host)
|
|
libp2pA --> NodeA: ps (GossipSub)
|
|
|
|
NodeA -> IndexerA: ConnectToIndexers → SendHeartbeat /opencloud/heartbeat/1.0
|
|
note over IndexerA: Heartbeat long-lived established\nQuality Score evaluated (bw + uptime + diversity)
|
|
IndexerA --> NodeA: OK
|
|
|
|
NodeA -> NodeA: claimInfo(name, hostname)
|
|
NodeA -> IndexerA: TempStream /opencloud/record/publish/1.0
|
|
NodeA -> IndexerA: stream.Encode(PeerRecord A signé)
|
|
IndexerA -> IndexerA: DHT.PutValue("/node/"+DID_A, record)
|
|
|
|
NodeA -> DBA: DB(PEER).Search(SELF)
|
|
DBA --> NodeA: local peer A (or new generated UUID)
|
|
|
|
NodeA -> NodeA: StartGC(30s) — GarbageCollector on StreamRecords
|
|
|
|
NodeA -> StreamA: InitStream(ctx, host, PeerID_A, 1000, nodeA)
|
|
StreamA -> StreamA: SetStreamHandler(heartbeat/partner, search, planner, ...)
|
|
StreamA -> DBA: Search(PEER, PARTNER) → partner list
|
|
DBA --> StreamA: Heartbeat long-lived established to partners
|
|
StreamA --> NodeA: StreamService A
|
|
|
|
NodeA -> PubSubA: InitPubSub(ctx, host, ps, nodeA, streamA)
|
|
PubSubA -> PubSubA: subscribeEvents(PB_SEARCH, timeout=-1)
|
|
PubSubA --> NodeA: PubSubService A
|
|
|
|
NodeA -> NodeA: SubscribeToSearch(ps, callback) (search global topic for resources)
|
|
note over NodeA: callback: GetPeerRecord(evt.From)\n→ StreamService.SendResponse
|
|
|
|
NodeA -> NATSA: ListenNATS(nodeA)
|
|
note over NATSA: Subscribes handlers:\nCREATE_RESOURCE, PROPALGATION_EVENT
|
|
|
|
NodeA --> MainA: *Node A is ready
|
|
|
|
@enduml
|