Cluster Compatibility
Supported stacks
| Component | Version | Notes |
|---|---|---|
| Aeron Java/C media driver | 1.46.x | archive + consensus module |
| Aeron Cluster Java | 1.46.x | clustered service container |
| rusteron (Rust bindings) | 0.2.x | rusteron-client, rusteron-archive |
| ergo-sbe (codec generator) | 0.1.x | schema 111 session + mark codecs |
| Rust | 1.88+ | MSRV, edition 2024 |
| OS | Linux x86-64, macOS aarch64 | CI-tested |
| Java | 17+ | test harness only |
Schema identities
| Schema | Id | Version |
|---|---|---|
| Aeron Cluster Session | 111 | 1 |
| Aeron Cluster Mark | 112 | 1 |
These are pinned in cluster/schemas/ and generated by cluster/build.rs.
The generated codec API is unstable — use the high-level AeronCluster
client, not the cluster_codec_types module directly.
Failure modes
The client handles these documented transitions:
| Trigger | Expected behaviour |
|---|---|
| Leader loss (egress closed / publication CLOSED) | Session → AwaitingNewLeader, poll for NewLeaderEvent |
| Redirect during connect | Follow leader_endpoints to new leader |
| Auth challenge | Pass to CredentialsSupplier, send ChallengeResponse |
| Auth rejection | ClusterError::AuthRejected |
| Timeout (connect / poll / new-leader) | ClusterError::Timeout / ClusterError::Disconnected |
| Listener panic | ClusterError::ListenerPanicked, session continues |
| Malformed egress frame | ClusterError::ProtocolError |
| Payload too large | ClusterError::PayloadTooLarge |
| Publication backpressure | Retryable ClusterError::Publication |
Multi-node test matrix
CI (cluster-compatibility.yml) covers:
- 3-node cluster: leader loss + redirect
- Auth challenge/rejection
- Fragmentation above max payload
- Controlled abort/retry
- Close + reconnect atomicity
- Timeout expiry (sync + async)
Limitations
- No dynamic membership (static cluster only).
- No snapshot/recovery integration.
- No TLS/mTLS at the Aeron transport layer.
- The
cluster_codec_typesmodule is#[doc(hidden)]and not stable API.