Add spdk RPC for transient hold IOs in the spdk internal buffers
- Dominant language
- Python
- Stars
- 132
- Forks
- 69
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 52
Description
**Overview**
Implement a generic mechanism inside SPDK for temporarily holding incoming I/O requests in internal buffers.
Key Functionality
Transient Hold State: An RPC enables the hold state, causing SPDK to queue incoming bdev I/O operations in internal memory without rejecting them or forwarding them to the underlying storage tier.
Drain on Disable: Disabling the transient hold state via RPC immediately drains and dispatches all buffered I/Os sequentially to the backend.
Use Case
In Active/Active configurations, this RPC can be invoked during gateway failover to temporarily pause I/O traffic immediately before accepting a new blocklist epoch.
Primary Advantage
Provides a lightweight, low-overhead mechanism to pause I/O during brief state transitions, serving as an efficient alternative to transitioning the namespace to an INACCESSIBLE ANA state—which incurs significant overhead and triggers heavy host-side multipath re-pathing logic.
Contributor guide
Research direction
Start by tracing the existing RPC handling and the SPDK bdev I/O path described in the issue. Determine how transient hold state, internal buffering, sequential draining, and failover use would fit together. Done means an RPC-controlled hold and disable flow that buffers incoming I/Os without rejection and drains them to the backend.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend, distributed-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100