Rust API Guide#
The library package is orbit-te; the Rust crate is orbit_te. This guide
describes the current source API. Generate its full type documentation with:
cargo doc --locked --no-deps --open
Add --features rdma,cuda when documenting native providers in an environment
with the build prerequisites.
Engine and registration#
TransferEngine::new(EngineConfig) starts a source control service and owns
requester/source admission. Its default bind address is loopback. Configuration
and budgets are immutable for that engine instance.
API |
Contract |
|---|---|
|
Transfer ownership of host bytes into a registered range |
|
Register a range of an existing |
|
Preflight a set of host ranges before publishing new registration references |
|
Retire a registration reference; admitted users retain their actual backing |
|
Resolve a contained registered address range without adopting an arbitrary pointer |
Permission distinguishes local-only, remote READ and remote READ/WRITE
authority. Repeated registration of the same range keeps its original
permission. CPU access coordination is shared across aliases.
For a configured RDMA engine with host Direct policy, host registration prepares every usable context’s MR copies before lookup/descriptor visibility and before duplicate reference increments commit. This includes paused ports: their PDs retain memory registration, while transfer admission waits for recovery. A failed batch retires only its newly created copies. Previously published ranges remain valid; failed native cleanup retains unpublished backing and its charges. This can fail at registration time when native resources or aggregate MR capacity are unavailable. See the publication contract.
Requests and reports#
TransferRequest names the transport, local address, remote address and length.
Both ranges must be contained in one applicable registration. TransferOp
selects READ or WRITE. Submission resolves and retains each backing allocation
before transfer effects.
submit_and_wait returns BatchReport with completed request/byte counts,
failure information, notification status and local drain status. The completed
prefix is not a transaction. RemoteEffect::Unknown means an attempted WRITE
may have changed peer bytes; a failed report does not authorize automatic replay.
TransferFailure.affected_requests is the number of consecutive tasks sharing
the failure from request_index. Shared NVLink import close/ACK failure excludes
the entire attempted group from the completed prefix; async tasks in this span
are failed, not skipped. Only later requests were never attempted.
For a cross-rail request, all slice receipts must complete before its one request
and full byte count are added. Earlier slices may already have changed bytes if
a later slice fails, including source-staged WRITE slices copied back after
their own completion. Completion is not an atomic multi-rail commit.
Remote staging READ starts each local POST after its scoped CROSS receipt.
Independent slot copies may complete out of order. A later failure, including
lost Unpin, leaves changed bytes visible but counts the failed request as zero
completed requests/bytes; native uncertainty does not imply an exact prefix.
The CUDA requester uses a bounded ring; WRITE does not snapshot the entire
request. Keep input bytes stable while a request is in flight. GPU staging range loans reject
conflicting access, including overlapping self-peer copies.
For asynchronous ownership, see Batch: submit groups,
seal, inspect or wait for completion, and retain the handle until resource
ownership is understood. Dropping a handle cannot free live native work.
Native providers#
transport::rdma::RdmaConfig selects discovery/pins, host direct or staged
memory, progress mode and bounded native resource budgets.
RdmaProgressMode::Polling is the default; EventDriven consumes native CQ
events while preserving the same data worker and completion validation.
The cuda module owns NVIDIA device/pinned-host allocations and synchronized
copies. Device pointers use declared host staging for network movement.
See RDMA and CUDA for exact range, grant and drain requirements.
Close and drain#
close_source fences source admission; close_requester fences requester
admission. Whole-engine close fences both, drains accepted work and closes
shared native resources. A timeout does not complete pending native work.
Error::Unquiesced retains the real resources and their charges after physical
cleanup could not be proved.
The runnable TCP example, external allocation example and async example use the public source API.