Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-73611

Implement RPC functionality of PinnedConnectionTaskExecutor

    • Type: Icon: Task Task
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 7.0.0-rc0, 6.0.6
    • Affects Version/s: None
    • Component/s: None
    • Labels:
    • Service Arch
    • Fully Compatible
    • v6.3
    • Service Arch 2023-03-20, Service Arch 2023-04-03

      Implement scheduleRemoteCommand and related RPC functionality of PinnedConnectionTaskExecutor. This should involve: 

      • Acquiring a connection from the networkInterface if this is the first RPC run through this PinnedConnectionTaskExecutor, and storing it
      • Enqueing the RPC request on a queue 
      • If no RPC work is currently being done, use the acquired connection to kick off asynchronous networking for the first RPC, using the reactor associated with the connection

      Ensuring that the asynchronous networking on the reactor will continue processing each queued RPC request in a FIFO order unitl no requests are queued

      Additionally, we'll need to handle cancellation for these RPC operations. This will involve: 
          -> Producing a CallbackState associated with each RPC operation request, and with a CallbackHandle returned to the user who scheduled the request
      -> Allowing that CallbackHandle's "cancel" functionality to prevent that RPC from ever being run, if it has not yet started, or to cancel the ongoing asynchronous operation if it has. This may require mutex acquisition so we need to think carefully about what the concurrency - control should be here, and if and how the underlying connection can be reused after cancellation.


      At implementation time, we may find it wortwhile to break the cancellation off into a separate task.

            george.wangensteen@mongodb.com George Wangensteen
            george.wangensteen@mongodb.com George Wangensteen
            0 Vote for this issue
            2 Start watching this issue