Skip to content
  • Alexandru Vasile's avatar
    chainHead: Allow methods to be called from within a single connection context... · 7430f413
    Alexandru Vasile authored
    
    chainHead: Allow methods to be called from within a single connection context and limit connections (#3481)
    
    This PR ensures that the chainHead RPC class can be called only from
    within the same connection context.
    
    The chainHead methods are now registered as raw methods. 
    - https://github.com/paritytech/jsonrpsee/pull/1297
    The concept of raw methods is introduced in jsonrpsee, which is an async
    method that exposes the connection ID:
    The raw method doesn't have the concept of a blocking method. Previously
    blocking methods are now spawning a blocking task to handle their
    blocking (ie DB) access. We spawn the same number of tasks as before,
    however we do that explicitly.
    
    Another approach would be implementing a RPC middleware that captures
    and decodes the method parameters:
    - https://github.com/paritytech/polkadot-sdk/pull/3343
    However, that approach is prone to errors since the methods are
    hardcoded by name. Performace is affected by the double deserialization
    that needs to happen to extract the subscription ID we'd like to limit.
    Once from the middleware, and once from the methods itself.
    
    This PR paves the way to implement the chainHead connection limiter:
    - https://github.com/paritytech/polkadot-sdk/issues/1505
    Registering tokens (subscription ID / operation ID) on the
    `RpcConnections` could be extended to return an error when the maximum
    number of operations is reached.
    
    While at it, have added an integration-test to ensure that chainHead
    methods can be called from within the same connection context.
    
    Before this is merged, a new JsonRPC release should be made to expose
    the `raw-methods`:
    - [x] Use jsonrpsee from crates io (blocked by:
    https://github.com/paritytech/jsonrpsee/pull/1297)
    
    Closes: https://github.com/paritytech/polkadot-sdk/issues/3207
    
    
    cc @paritytech/subxt-team
    
    ---------
    
    Signed-off-by: default avatarAlexandru Vasile <[email protected]>
    Co-authored-by: default avatarNiklas Adolfsson <[email protected]>
    7430f413