don't panic when there are concurrent requests #1736
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
This diff adds a FIFO waiting mechanism for acquiring the queue pair.
True concurrency support will come in follow-up diff: this will require we track wr_id and create a polling task for each queue pair, which will need further refactoring.
Limitations
Core changes:
Fair Waiting via Semaphore: Replaced Available/CheckedOut states with Connecting/Ready/ConnectionError. Added QueuePairEntry wrapping RdmaQueuePair + Arc. request_queue_pair uses two-phase approach (get/create QP, then acquire semaphore permit for FIFO fairness).
Refactor - Moved read_into/write_from to RdmaManagerActor: Prevents deadlock in actor message queue. Old design had RdmaBuffer call request_queue_pair RPC → perform operation → call release_queue_pair RPC, causing release messages to queue behind waiting requests. Now entire operation (request → use → release) happens within single actor message handler.
Refactored Connection Logic: Extracted establish_connection helper handling both loopback and remote connections.
Test: Added create_buffer_pair method and concurrent tests.
Differential Revision: D85627877