Skip to content

Releases: joaquinbejar/IronSBE

v0.3.0

12 Apr 12:36
6fd2d20

Choose a tag to compare

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 familyTransport/Connection/Listener (Send+Sync) for multi-threaded runtimes, plus LocalTransport/LocalConnection/LocalListener (!Send) for thread-per-core backends.
  • Configurable tunablesmax_frame_size, connect_timeout, SO_RCVBUF/SO_SNDBUF via socket2, backend-specific BindConfig/ConnectConfig types.
  • Default backendtcp-tokio remains 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 via tokio::io::unix::AsyncFd on the CM event channel fd (non-blocking).
  • RdmaConnection — client-side connect flow (resolve_addrresolve_routeconnect), all async.
  • CQ drainsend() drains pending SEND completions before posting, with a recv-completion inbox for RECV WCs encountered during drain. Watermarks derived from CQ_CAPACITY and RECV_DEPTH.
  • Real peer_addr() / local_addr() — extracted from (*cm_id).route.addr via sockaddr_to_socket_addr helper.
  • Loopback integration tests on SoftRoCE (round-trip, peer_addr, async yield).

Server bug fixes (#40, #41, #42, #44, #45)

  • #42 — Shutdown / CloseSession propagationtokio_util::sync::CancellationToken with parent/child semantics. Shutdown cancels every session; CloseSession(id) cancels exactly one. Cooperative cancellation via a third select! branch in handle_session, preserving on_session_end cleanup.
  • #40 — BroadcastServerCommand::Broadcast now iterates a per-session Arc<RwLock<HashMap<u64, UnboundedSender>>> and retains live senders.
  • #41send_toSessionResponder::send_to(target, msg) resolves target against the live session table. Returns SendError for unknown or closed targets.
  • Session slot leak (#32) — CloseSession command fired by spawned tasks on disconnect, freeing SessionManager slots.

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-header on_error)
  • Session lifecycle (on_session_start/on_session_end callbacks, SessionCreated/SessionClosed events, monotonic IDs)
  • Multi-client (10 concurrent clients, max_connections cap, 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)
  • MessageDispatcher routing (template ID dispatch + fallback)

All waits are event-driven with explicit deadlines — no fixed sleeps.

Breaking changes

  • RdmaConfig::bind_addr renamed to RdmaConfig::addr (#51) — used for both bind and connect.
  • Transport trait split: Transport (Send+Sync) vs LocalTransport (!Send) — existing tcp-tokio users are unaffected (it implements Transport).
  • ServerBuilder / ClientBuilder now take generic transport type parameter T: Transport (defaults to DefaultTransport when tcp-tokio feature is enabled).
  • New workspace dependency: tokio-util features expanded to ["codec", "rt"] for CancellationToken.

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.3.0

v0.2.2

08 Apr 08:33
7dcc24c

Choose a tag to compare

Fix ironsbe-client busy loop (#19)

Changes

  • ironsbe-client 0.2.1 → 0.2.2
  • ironsbe-server 0.2.1 → 0.2.2

See #19 for details.

v0.2.1

07 Apr 17:37
4f46d5e

Choose a tag to compare

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_case handling of acronyms and underscores (#11, closes #7, supersedes #8)
    • REDUCE_ONLYreduce_only (was r_e_d_u_c_e__o_n_l_y)
    • MDEntryPxmd_entry_px (was m_d_entry_px)
    • Fix clippy::unnecessary_map_or lint
  • 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

16 Mar 13:16
a9dca32

Choose a tag to compare

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

Full Changelog: v0.1.2...v0.2.0

v0.1.2

28 Jan 09:04
91f2b41

Choose a tag to compare

Bump version to 0.1.2 across workspace and internal crates.

v0.1.1

28 Jan 08:22
0b1c51f

Choose a tag to compare

Add extensive unit tests across crates to enhance coverage and valida…