Skip to content
Unverified Commit a0aefc6b authored by Pavlo Khrystenko's avatar Pavlo Khrystenko Committed by GitHub
Browse files

rpc v2: backpressure `chainhead_v1_follow` (#6058)



# Description

closes #5871

> The chainHead_v1_follow is using unbounded channels to send out
messages on the JSON-RPC connection which may use lots of memory if the
client is slow and can't really keep up with server i.e, substrate may
keep lots of message in memory

This PR changes the outgoing stream to abort and send a `Stop` event
downstream in the case that client doesn't keep up with the producer.

## Integration

*In depth notes about how this PR should be integrated by downstream
projects. This part is mandatory, and should be
reviewed by reviewers, if the PR does NOT have the `R0-Silent` label. In
case of a `R0-Silent`, it can be ignored.*

## Review Notes

- `rpc::Subscription::pipe_from_stream` - now takes `Self` param by
reference, change was made to allow sending events to the `Subscription`
after calls to `pipe_from_stream`.
- `chainhead_follow::submit_events` - now uses `Abortable` stream to end
it early in case
     - connection was closed by the client
     - signal received that subscription should stop 
     - error has occured when processing the events 
     - client can't keep up with the events produced
- TODO: 
  - make the abort logic less hacky

---------

Co-authored-by: default avatarNiklas Adolfsson <[email protected]>
Co-authored-by: default avatarAlexandru Vasile <[email protected]>
parent 09155dbc
Pipeline #501928 waiting for manual action with stages
in 39 minutes and 17 seconds
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment