Releases: joaquinbejar/IronSBE
v0.3.0
This release completes the Transport Backends milestone, delivering pluggable low-latency transport backends, a comprehensive end-to-end integration test suite, and critical server bug fixes.
Highlights
Pluggable transport architecture (#14, #20–#25)
- Transport trait family —
Transport/Connection/Listener(Send+Sync) for multi-threaded runtimes, plusLocalTransport/LocalConnection/LocalListener(!Send) for thread-per-core backends. - Configurable tunables —
max_frame_size,connect_timeout,SO_RCVBUF/SO_SNDBUFviasocket2, backend-specificBindConfig/ConnectConfigtypes. - Default backend —
tcp-tokioremains the default; all others are opt-in via cargo features.
New transport backends
| Backend | Crate | Issue | Status |
|---|---|---|---|
| io_uring TCP | ironsbe-transport (feature tcp-uring) |
#15 | Production-ready on Linux 5.11+ |
| AF_XDP | ironsbe-transport (feature xdp) |
#16, #28 | Pure-Rust userspace TCP stack via xsk-rs + smoltcp |
| DPDK | ironsbe-transport-dpdk |
#17, #36 | AF_XDP PMD mode, bindgen FFI, Linux-only opt-in |
| RDMA/ibverbs | ironsbe-transport-rdma |
#18, #38, #39, #48 | Two-sided SEND/RECV over Queue Pairs via RDMA CM, SoftRoCE tested |
RDMA backend details (#38, #39, #46, #48, #49, #50, #51, #52)
RdmaListener— async accept viatokio::io::unix::AsyncFdon the CM event channel fd (non-blocking).RdmaConnection— client-side connect flow (resolve_addr→resolve_route→connect), all async.- CQ drain —
send()drains pending SEND completions before posting, with a recv-completion inbox for RECV WCs encountered during drain. Watermarks derived fromCQ_CAPACITYandRECV_DEPTH. - Real
peer_addr()/local_addr()— extracted from(*cm_id).route.addrviasockaddr_to_socket_addrhelper. - Loopback integration tests on SoftRoCE (round-trip, peer_addr, async yield).
Server bug fixes (#40, #41, #42, #44, #45)
- #42 — Shutdown / CloseSession propagation —
tokio_util::sync::CancellationTokenwith parent/child semantics.Shutdowncancels every session;CloseSession(id)cancels exactly one. Cooperative cancellation via a thirdselect!branch inhandle_session, preservingon_session_endcleanup. - #40 — Broadcast —
ServerCommand::Broadcastnow iterates a per-sessionArc<RwLock<HashMap<u64, UnboundedSender>>>andretains live senders. - #41 —
send_to—SessionResponder::send_to(target, msg)resolvestargetagainst the live session table. ReturnsSendErrorfor unknown or closed targets. - Session slot leak (#32) —
CloseSessioncommand fired by spawned tasks on disconnect, freeingSessionManagerslots.
End-to-end integration test suite (#43)
26 tests across 6 files exercising the full Server + Client lifecycle over tcp-tokio:
- Round-trip framing (single, 100x sequence, 60 KB, custom 256 KB
max_frame_size, oversized rejection, sub-headeron_error) - Session lifecycle (
on_session_start/on_session_endcallbacks,SessionCreated/SessionClosedevents, monotonic IDs) - Multi-client (10 concurrent clients,
max_connectionscap, session count tracking) - Reconnect state machine (connect timeout, reconnect after server starts,
max_reconnect_attempts) - Shutdown + handle surfaces (Server shutdown, Client disconnect,
wait_event, Broadcast,send_to, close_session) MessageDispatcherrouting (template ID dispatch + fallback)
All waits are event-driven with explicit deadlines — no fixed sleeps.
Breaking changes
RdmaConfig::bind_addrrenamed toRdmaConfig::addr(#51) — used for both bind and connect.- Transport trait split:
Transport(Send+Sync) vsLocalTransport(!Send) — existingtcp-tokiousers are unaffected (it implementsTransport). ServerBuilder/ClientBuildernow take generic transport type parameterT: Transport(defaults toDefaultTransportwhentcp-tokiofeature is enabled).- New workspace dependency:
tokio-utilfeatures expanded to["codec", "rt"]forCancellationToken.
Crates published
| Crate | Version |
|---|---|
ironsbe-core |
0.3.0 |
ironsbe-derive |
0.3.0 |
ironsbe-schema |
0.3.0 |
ironsbe-codegen |
0.3.0 |
ironsbe-channel |
0.3.0 |
ironsbe-transport |
0.3.0 |
ironsbe-server |
0.3.0 |
ironsbe-client |
0.3.0 |
ironsbe-marketdata |
0.3.0 |
ironsbe-bench |
0.3.0 |
ironsbe |
0.3.0 |
ironsbe-transport-dpdk and ironsbe-transport-rdma are not published to crates.io — they require Linux-only system libraries (libdpdk-dev, libibverbs-dev + librdmacm-dev) and are excluded from the default workspace members.
Full changelog
v0.2.2
v0.2.1
What's Changed
Bug Fixes
- fix(codegen): Scope group code generation to message-specific modules to avoid duplicate definitions (#6)
- fix(lint): Improve
to_snake_casehandling of acronyms and underscores (#11, closes #7, supersedes #8)REDUCE_ONLY→reduce_only(wasr_e_d_u_c_e__o_n_l_y)MDEntryPx→md_entry_px(wasm_d_entry_px)- Fix
clippy::unnecessary_map_orlint
- test: Add regression tests for issue #7 (underscore set choice names)
Crates Published
All 11 workspace crates published to crates.io:
ironsbe, ironsbe-core, ironsbe-schema, ironsbe-codegen, ironsbe-derive, ironsbe-channel, ironsbe-transport, ironsbe-server, ironsbe-client, ironsbe-marketdata, ironsbe-bench
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- feat(codegen): Complete enum, set, and composite type code generation by @j-b-layerv in #3
- chore: bump version to 0.2.0 by @joaquinbejar in #4
New Contributors
- @j-b-layerv made their first contribution in #3
- @joaquinbejar made their first contribution in #4
Full Changelog: v0.1.2...v0.2.0
v0.1.2
Bump version to 0.1.2 across workspace and internal crates.
v0.1.1
Add extensive unit tests across crates to enhance coverage and valida…