Files
oc-discovery/docs/diagrams/09_nats_propagation.puml

74 lines
3.3 KiB
Plaintext
Raw Normal View History

2026-02-24 14:31:37 +01:00
@startuml
2026-03-09 14:57:41 +01:00
title NATS — PROPALGATION_EVENT : Peer A propalgate to Peer B lookup
2026-02-24 14:31:37 +01:00
participant "App Pair A" as AppA
participant "NATS A" as NATSA
participant "Node A" as NodeA
participant "StreamService A" as StreamA
2026-03-09 14:57:41 +01:00
participant "Node Partner B" as PeerB
participant "Node C" as PeerC
2026-02-24 14:31:37 +01:00
participant "NATS B" as NATSB
participant "DB Pair B (oc-lib)" as DBB
2026-03-09 14:57:41 +01:00
note over App: only our proper resource (db data) can be propalgate : creator_id==self
2026-02-24 14:31:37 +01:00
AppA -> NATSA: Publish(PROPALGATION_EVENT, {Action, DataType, Payload})
NATSA -> NodeA: ListenNATS callback → PROPALGATION_EVENT
2026-03-09 14:57:41 +01:00
NodeA -> NodeA: propalgate from himself ? → no, continue
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: json.Unmarshal → PropalgationMessage{Action, DataType, Payload}
alt Action == PB_DELETE
NodeA -> StreamA: ToPartnerPublishEvent(PB_DELETE, dt, user, payload)
2026-03-09 14:57:41 +01:00
StreamA -> StreamA: searchPeer(PARTNER) → [Peer Partner B, ...]
2026-02-24 14:31:37 +01:00
StreamA -> NodeB: write(PeerID_B, addr_B, dt, user, payload, ProtocolDeleteResource)
note over NodeB: /opencloud/resource/delete/1.0
NodeB -> NodeB: handleEventFromPartner(evt, ProtocolDeleteResource)
NodeB -> NATSB: SetNATSPub(REMOVE_RESOURCE, {DataType, resource JSON})
2026-03-09 14:57:41 +01:00
NATSB -> DBB: Suppress ressource into DB B
2026-02-24 14:31:37 +01:00
2026-03-09 14:57:41 +01:00
else Action == PB_UPDATE (per ProtocolUpdateResource)
2026-02-24 14:31:37 +01:00
NodeA -> StreamA: ToPartnerPublishEvent(PB_UPDATE, dt, user, payload)
2026-03-09 14:57:41 +01:00
StreamA -> StreamA: searchPeer(PARTNER) → [Peer Partner B, ...]
2026-02-24 14:31:37 +01:00
StreamA -> NodeB: write → /opencloud/resource/update/1.0
NodeB -> NATSB: SetNATSPub(CREATE_RESOURCE, {DataType, resource JSON})
NATSB -> DBB: Upsert ressource dans DB B
2026-03-09 14:57:41 +01:00
else Action == PB_CREATE (per ProtocolCreateResource)
NodeA -> StreamA: ToPartnerPublishEvent(PB_UPDATE, dt, user, payload)
StreamA -> StreamA: searchPeer(PARTNER) → [Peer Partner B, ...]
StreamA -> NodeB: write → /opencloud/resource/create/1.0
NodeB -> NATSB: SetNATSPub(CREATE_RESOURCE, {DataType, resource JSON})
NATSB -> DBB: Create ressource dans DB B
else Action == PB_CONSIDERS (is a considering a previous action, such as planning or creating resource)
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: Unmarshal → executionConsidersPayload{PeerIDs:[PeerID_B, ...]}
2026-03-09 14:57:41 +01:00
loop For every peer_id targeted
2026-02-24 14:31:37 +01:00
NodeA -> StreamA: PublishCommon(dt, user, PeerID_B, ProtocolConsidersResource, payload)
StreamA -> NodeB: write → /opencloud/resource/considers/1.0
NodeB -> NodeB: passConsidering(evt)
NodeB -> NATSB: SetNATSPub(PROPALGATION_EVENT, {PB_CONSIDERS, dt, payload})
2026-03-09 14:57:41 +01:00
NATSB -> DBB: (treat per emmitters app of a previous action on NATS B)
2026-02-24 14:31:37 +01:00
end
else Action == PB_CLOSE_PLANNER
NodeA -> NodeA: Unmarshal → {peer_id: PeerID_B}
NodeA -> StreamA: Streams[ProtocolSendPlanner][PeerID_B].Stream.Close()
NodeA -> StreamA: delete(Streams[ProtocolSendPlanner], PeerID_B)
else Action == PB_SEARCH + DataType == PEER
2026-03-09 14:57:41 +01:00
NodeA -> NodeA: read → {search: "..."}
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: GetPeerRecord(ctx, search)
2026-03-09 14:57:41 +01:00
note over NodeA: Resolved per DB A or Indexer + DHT
2026-02-24 14:31:37 +01:00
NodeA -> NATSA: SetNATSPub(SEARCH_EVENT, {PEER, PeerRecord JSON})
2026-03-09 14:57:41 +01:00
NATSA -> NATSA: (AppA retrieve results)
2026-02-24 14:31:37 +01:00
2026-03-09 14:57:41 +01:00
else Action == PB_SEARCH + other DataType
NodeA -> NodeA: read → {type:"all"|"known"|"partner", search:"..."}
2026-02-24 14:31:37 +01:00
NodeA -> NodeA: PubSubService.SearchPublishEvent(ctx, dt, type, user, search)
2026-03-09 14:57:41 +01:00
note over NodeA: Watch after pubsub_search & stream_search diagrams
2026-02-24 14:31:37 +01:00
end
@enduml