|
1 | 1 | @startuml Responding To A Request
|
2 | 2 | participant "GraphSync\nTop Level\nInterface" as TLI
|
3 | 3 | participant ResponseManager
|
4 |
| -participant "Query Workers" as QW |
| 4 | +participant "Query Executor" as QW |
5 | 5 | participant PeerTaskQueue
|
6 | 6 | participant PeerTracker
|
7 |
| -participant PeerResponseManager |
8 |
| -participant PeerResponseSender |
| 7 | +participant Traverser |
| 8 | +participant ResponseAssembler |
9 | 9 | participant LinkTracker
|
10 | 10 | participant ResponseBuilder
|
11 |
| -participant IPLD |
12 | 11 | participant "Intercepted Loader" as ILoader
|
13 | 12 | participant Loader
|
14 | 13 | participant "Message Sending\nLayer" as Message
|
@@ -37,63 +36,40 @@ ResponseManager -> ResponseManager : Cancel Request Context
|
37 | 36 | end
|
38 | 37 | end
|
39 | 38 | else
|
40 |
| -par |
41 | 39 | loop until shutdown
|
42 | 40 | note over QW: Request Processing Loop
|
43 | 41 | QW -> PeerTaskQueue : Pop Request
|
44 | 42 | PeerTaskQueue -> PeerTracker : Pop Request
|
45 | 43 | PeerTracker -> PeerTaskQueue : Next Request\nTo Process
|
46 | 44 | PeerTaskQueue -> QW : Next Request\nTo Process
|
47 |
| -QW -> IPLD : DecodeNode |
48 |
| -IPLD -> QW : Selector Spec Node |
49 |
| -QW -> IPLD : ParseSelector |
50 |
| -IPLD -> QW : Root Node, IPLD Selector |
51 |
| -QW -> PeerResponseManager : SenderForPeer |
52 |
| -PeerResponseManager -> PeerResponseSender ** : Create for peer\nas neccesary |
53 |
| -PeerResponseSender -> LinkTracker ** : Create |
54 |
| -PeerResponseSender -> QW : PeerResponseSender |
55 |
| -activate PeerResponseSender |
56 |
| -QW -> ILoader ** : Create w/ RequestID, PeerResponseSender, Loader |
57 |
| -QW -> IPLD : Start Traversal Of Selector |
| 45 | +QW -> QW : Process incoming request hooks |
| 46 | +QW -> ILoader ** : Create w/ Request, Peer, and Loader |
| 47 | +QW -> Traverser ** : Create to manage selector traversal |
58 | 48 | loop until traversal complete or request context cancelled
|
59 |
| -note over PeerResponseSender: Selector Traversal Loop |
60 |
| -IPLD -> ILoader : Request to load blocks\nto perform traversal |
| 49 | +note over Traverser: Selector Traversal Loop |
| 50 | +Traverser -> ILoader : Request to load blocks\nto perform traversal |
61 | 51 | ILoader -> Loader : Load blocks\nfrom local storage
|
62 | 52 | Loader -> ILoader : Blocks From\nlocal storage or error
|
63 |
| -ILoader -> IPLD : Blocks to continue\n traversal or error |
64 |
| -ILoader -> PeerResponseSender : Block or error to Send Back |
65 |
| -activate PeerResponseSender |
66 |
| -PeerResponseSender -> LinkTracker : Notify block or\n error, ask whether\n block is duplicate |
67 |
| -LinkTracker -> PeerResponseSender : Whether to\n send block |
68 |
| -PeerResponseSender -> ResponseBuilder ** : Create New As Neccesary |
69 |
| -PeerResponseSender -> ResponseBuilder : Aggregate Response Metadata & Block |
70 |
| -PeerResponseSender -> PeerResponseSender : Signal Work To Do |
71 |
| -deactivate PeerResponseSender |
72 |
| -end |
73 |
| -IPLD -> QW : Traversal Complete |
74 |
| -QW -> PeerResponseSender : Request Finished |
75 |
| -activate PeerResponseSender |
76 |
| -PeerResponseSender -> LinkTracker : Query If Errors\n Were Present |
77 |
| -LinkTracker -> PeerResponseSender : True/False\n if errors present |
78 |
| -PeerResponseSender -> ResponseBuilder : Aggregate request finishing |
79 |
| -PeerResponseSender -> PeerResponseSender : Signal Work To Do |
80 |
| -deactivate PeerResponseSender |
81 |
| -end |
82 |
| -else |
83 |
| -loop until shutdown / disconnect |
84 |
| -note over PeerResponseSender: Message Sending\nLoop |
85 |
| -PeerResponseSender -> PeerResponseSender : Wait For Work Signal |
86 |
| -... |
87 |
| -PeerResponseSender -> ResponseBuilder : build response |
88 |
| -ResponseBuilder -> PeerResponseSender : Response message data to send |
89 |
| -PeerResponseSender -> Message : Send response message data |
90 |
| -activate Message |
91 |
| -Message -> PeerResponseSender : Channel For When Message Processed |
92 |
| -... |
93 |
| -Message -> PeerResponseSender : Notification on channel |
94 |
| -deactivate Message |
| 53 | +ILoader -> Traverser : Blocks to continue\n traversal or error |
| 54 | +ILoader -> QW : Block or error to Send Back |
| 55 | +QW -> QW: Processing outgoing block hooks |
| 56 | +QW -> ResponseAssembler: Add outgoing responses |
| 57 | +activate ResponseAssembler |
| 58 | +ResponseAssembler -> LinkTracker ** : Create for peer if not already present |
| 59 | +ResponseAssembler -> LinkTracker : Notify block or\n error, ask whether\n block is duplicate |
| 60 | +LinkTracker -> ResponseAssembler : Whether to\n send block |
| 61 | +ResponseAssembler -> ResponseBuilder : Aggregate Response Metadata & Block |
| 62 | +ResponseAssembler -> Message : Send aggregate response |
| 63 | +deactivate ResponseAssembler |
95 | 64 | end
|
96 |
| -deactivate PeerResponseSender |
| 65 | +Traverser -> QW : Traversal Complete |
| 66 | +QW -> ResponseAssembler : Request Finished |
| 67 | +activate ResponseAssembler |
| 68 | +ResponseAssembler -> LinkTracker : Query If Errors\n Were Present |
| 69 | +LinkTracker -> ResponseAssembler : True/False\n if errors present |
| 70 | +ResponseAssembler -> ResponseBuilder : Aggregate request finishing |
| 71 | +ResponseAssembler -> Message : Send aggregate response |
| 72 | +deactivate ResponseAssembler |
97 | 73 | end
|
98 | 74 | deactivate QW
|
99 | 75 | end
|
|
0 commit comments