67 lines
3.2 KiB
Plaintext
67 lines
3.2 KiB
Plaintext
sequenceDiagram
|
|
title NATS — PROPALGATION_EVENT : Pair A propage vers Pair B
|
|
|
|
participant AppA as App Pair A
|
|
participant NATSA as NATS A
|
|
participant NodeA as Node A
|
|
participant StreamA as StreamService A
|
|
participant NodeB as Node B
|
|
participant NATSB as NATS B
|
|
participant DBB as DB Pair B (oc-lib)
|
|
|
|
AppA->>NATSA: Publish(PROPALGATION_EVENT, {Action, DataType, Payload})
|
|
NATSA->>NodeA: ListenNATS callback → PROPALGATION_EVENT
|
|
NodeA->>NodeA: resp.FromApp != "oc-discovery" ? → continuer
|
|
NodeA->>NodeA: json.Unmarshal → PropalgationMessage{Action, DataType, Payload}
|
|
|
|
alt Action == PB_DELETE
|
|
NodeA->>StreamA: ToPartnerPublishEvent(PB_DELETE, dt, user, payload)
|
|
StreamA->>StreamA: searchPeer(PARTNER) → [Pair B, ...]
|
|
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})
|
|
NATSB->>DBB: Supprimer ressource dans DB B
|
|
|
|
else Action == PB_UPDATE (via ProtocolUpdateResource)
|
|
NodeA->>StreamA: ToPartnerPublishEvent(PB_UPDATE, dt, user, payload)
|
|
StreamA->>NodeB: write → /opencloud/resource/update/1.0
|
|
NodeB->>NATSB: SetNATSPub(CREATE_RESOURCE, {DataType, resource JSON})
|
|
NATSB->>DBB: Upsert ressource dans DB B
|
|
|
|
else Action == PB_CONSIDERS + WORKFLOW_EXECUTION
|
|
NodeA->>NodeA: Unmarshal → executionConsidersPayload{PeerIDs:[PeerID_B, ...]}
|
|
loop Pour chaque peer_id cible
|
|
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})
|
|
NATSB->>DBB: (traité par oc-workflow sur NATS B)
|
|
end
|
|
|
|
else Action == PB_PLANNER (broadcast)
|
|
NodeA->>NodeA: Unmarshal → {peer_id: nil, ...payload}
|
|
loop Pour chaque stream ProtocolSendPlanner ouvert
|
|
NodeA->>StreamA: PublishCommon(nil, user, pid, ProtocolSendPlanner, payload)
|
|
StreamA->>NodeB: write → /opencloud/resource/planner/1.0
|
|
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
|
|
NodeA->>NodeA: Unmarshal → {search: "..."}
|
|
NodeA->>NodeA: GetPeerRecord(ctx, search)
|
|
Note over NodeA: Résolution via DB A + Indexer + DHT
|
|
NodeA->>NATSA: SetNATSPub(SEARCH_EVENT, {PEER, PeerRecord JSON})
|
|
NATSA->>NATSA: (AppA reçoit le résultat)
|
|
|
|
else Action == PB_SEARCH + autre DataType
|
|
NodeA->>NodeA: Unmarshal → {type:"all"|"known"|"partner", search:"..."}
|
|
NodeA->>NodeA: PubSubService.SearchPublishEvent(ctx, dt, type, user, search)
|
|
Note over NodeA: Voir diagrammes 10 et 11
|
|
end
|