Buffer uplink communications to give a chance for stateful entities at each end to initialise themselves before sending messages.
An alternative approach would be to reintroduce flow-control, which was
removed as part of commit 94e27e1
.
This commit is contained in:
parent
8daff63e8e
commit
43a0578f19
|
@ -98,11 +98,31 @@
|
|||
(assert (server-proposal management-scope (federated-link session-id local-scope)))
|
||||
(assert (to-server peer-addr (federated-link session-id remote-scope)))
|
||||
|
||||
;; We have to buffer in both directions, because at startup there's latency
|
||||
;; between asserting a federated-link record and it being ready to receive
|
||||
;; message-poa->server records.
|
||||
(field [pending-in '()]
|
||||
[pending-out '()])
|
||||
|
||||
(on (message (from-server peer-addr (message-server->poa session-id $p)))
|
||||
(send! (server-proposal management-scope (message-poa->server session-id p))))
|
||||
(pending-in (cons p (pending-in))))
|
||||
|
||||
(on (message (server-envelope management-scope (message-server->poa session-id $p)))
|
||||
(send! (to-server peer-addr (message-poa->server session-id p))))))))
|
||||
(pending-out (cons p (pending-out))))
|
||||
|
||||
(during (server-envelope management-scope (observe (message-poa->server session-id _)))
|
||||
(during (from-server peer-addr (observe (message-poa->server session-id _)))
|
||||
(begin/dataflow
|
||||
(when (pair? (pending-in))
|
||||
(for [(p (reverse (pending-in)))]
|
||||
(send! (server-proposal management-scope
|
||||
(message-poa->server session-id p))))
|
||||
(pending-in '())))
|
||||
(begin/dataflow
|
||||
(when (pair? (pending-out))
|
||||
(for [(p (reverse (pending-out)))]
|
||||
(send! (to-server peer-addr (message-poa->server session-id p))))
|
||||
(pending-out '())))))))))
|
||||
|
||||
;;---------------------------------------------------------------------------
|
||||
;; Local links.
|
||||
|
|
Loading…
Reference in New Issue