Skip to content

Feature add s3rdma backend placeholder in IO framework - #181

Draft
ran-yuan-rui wants to merge 6 commits into
NVIDIA:mainfrom
ran-yuan-rui:feature-s3rdma-s1-seams
Draft

Feature add s3rdma backend placeholder in IO framework#181
ran-yuan-rui wants to merge 6 commits into
NVIDIA:mainfrom
ran-yuan-rui:feature-s3rdma-s1-seams

Conversation

@ran-yuan-rui

Copy link
Copy Markdown
Contributor

Working in progress.

@copy-pr-bot

copy-pr-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@ran-yuan-rui ran-yuan-rui changed the title Feature add s3rdma support in IO framework Feature add s3rdma backend placeholder in IO framework Aug 6, 2026
@ran-yuan-rui
ran-yuan-rui force-pushed the feature-s3rdma-s1-seams branch from 7ab7c7e to 4098802 Compare August 6, 2026 13:09
A new backend identifier for an S3-over-RDMA ioctx. The registry is
map-driven (no switch over the enum), so the value is inert until a
backend registers under it.
Listing is prefix resolution on the control plane, independent of how a
backend's data plane reads the resolved keys. A glob / LIST layer can now
depend on this interface instead of a concrete ioctx type. rest_ioctx
implements it in the same change (its existing list_objects_paged /
list_max_matches become overrides — no behavior change), so the interface
lands with a production implementation.

The ListObjectsV2 page/entry types stay in rest/s3: they are S3-protocol
shapes, not REST-transport shapes; the include is documented as such.
A protected virtual with an empty default body, called from the catch of
both device-plane dispatch bodies before the failure is softened into an
errored future. A backend whose contract makes a poisoned CUDA context
process-fatal probes context health in its override; every existing
backend inherits the no-op and is behavior-identical. Not called on
success paths or on the empty-reactor-pool return (no exception there).
Hands one type's registration to a new backend type in a single stroke —
unlike an unregister+register pair there is no observable no-claimant gap
and no call-it-early-enough discipline left to convention. Throws
invalid_argument on a missing old type, an already-registered new type,
or null checker/factory, with the strong guarantee (the emplace precedes
an erase by key — an iterator would not survive a rehash). The registry
latches its first lookup_path; replace_ioctx afterwards throws
logic_error (bootstrap is single-threaded by contract).
Reserves the S3-over-RDMA backend's name and surface: an ioctx subclass
with a deleted constructor (pinned by a static_assert) and every override
declared but not defined — non-constructible, claiming no paths — plus a
placeholder translation unit so CI compiles the header. The backend is
under active development downstream against the seams this framework
carries (the s3rdma context type, object_store_listing, the
dispatch-failure hook, replace_ioctx) and will replace this declaration
wholesale when it is contributed upstream.
…ject_store_listing

Registry: replace success re-routes s3:// and proves the old claimant is
gone (a counting factory registered over it stays at zero calls);
invalid_argument on missing old / registered new / null checker /
null factory, each leaving routing unchanged; logic_error after the
first lookup_path; register_ioctx stays legal after lookup.

Hook: a stub reactor drives both device-plane dispatch bodies through
prep- and enqueue-stage throws (hook fires exactly once per failed
dispatch), empty reactor selection and success paths (no call), and the
non-overriding default (error future preserved).

Listing: rest_ioctx exercised purely through the object_store_listing
interface against a test-local scripted LIST server (multi-page with
continuation tokens, query recording; the accept thread owns a fixed fd,
shut down before join): pagination, early-stop sink, on-the-wire
max-keys clamp, the max_scanned cap, and the configured match cap.
@ran-yuan-rui
ran-yuan-rui force-pushed the feature-s3rdma-s1-seams branch from 4098802 to 7bc2084 Compare August 6, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant