ceph / ceph/ceph-nvmeof

Add spdk RPC for transient hold IOs in the spdk internal buffers

Open
#2,136 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.