• Niklas Adolfsson's avatar
    rpc: backpressured RPC server (bump jsonrpsee 0.20) (#1313) · e16ef086
    Niklas Adolfsson authored
    This is a rather big change in jsonrpsee, the major things in this bump
    are:
    - Server backpressure (the subscription impls are modified to deal with
    that)
    - Allow custom error types / return types (remove jsonrpsee::core::Error
    and jsonrpee::core::CallError)
    - Bug fixes (graceful shutdown in particular not used by substrate
    anyway)
       - Less dependencies for the clients in particular
       - Return type requires Clone in method call responses
       - Moved to tokio channels
       - Async subscription API (not used in this PR)
    
    Major changes in this PR:
    - The subscriptions are now bounded and if subscription can't keep up
    with the server it is dropped
    - CLI: add parameter to configure the jsonrpc server bounded message
    buffer (default is 64)
    - Add our own subscription helper to deal with the unbounded streams in
    substrate
    
    The most important things in this PR to review is the added helpers
    functions in `substrate/client/rpc/src/utils.rs` and the rest is pretty
    much chore.
    
    Regarding the "bounded buffer limit" it may cause the server to handle
    the JSON-RPC calls
    slower than before.
    
    The message size limit is bounded by "--rpc-response-size" thus "by
    default 10MB * 64 = 640MB"
    but the subscription message size is not covered by this limit and could
    be capped as well.
    
    Hopefully the last release prior to 1.0, sorry in advance for a big PR
    
    Previous attempt: https://github.com/paritytech/substrate/pull/13992
    
    Resolves https://github.com/paritytech/polkadot-sdk/issues/748, resolves
    https://github.com/paritytech/polkadot-sdk/issues/627
    e16ef086