Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cluster Compatibility

Supported stacks

ComponentVersionNotes
Aeron Java/C media driver1.53.3aeron submodule tag; archive + consensus module
Aeron Cluster Java1.53.3clustered service container
rusteron (Rust bindings)0.2.13 (workspace Cargo.toml)rusteron-client, rusteron-media-driver; bundles Aeron C 1.53.3 (the tutorial sample also uses rusteron-archive)
ergo-sbe (codec generator)0.1.xschema 111 session + mark codecs
Rust1.99+the workspace rust-version (the cluster Cargo.toml declares none); edition 2024. CI builds the cluster crate with 1.99.0; the MSRV job checks ergo-sbe only
OSLinux x86-64 and arm64CI runs the cluster unit tests on ubuntu-24.04 and ubuntu-24.04-arm, and the live-cluster harness on ubuntu-24.04 only. macOS is not run in CI
Java25 (17+)Archive and Cluster; the test harness runs Temurin 25 in CI (21 for the Aeron 1.46.8 compatibility job). Java for Archive and Cluster

Schema identities

SchemaIdSBE versionsemanticVersion
Aeron Cluster Session111175.4
Aeron Cluster Mark11025.4

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:

TriggerExpected behaviour
Leader loss (the session’s egress image closes / publication CLOSED)Session → AwaitingNewLeader, poll for NewLeaderEvent
NewLeaderEvent (the last one in a poll)Bind to the image that delivered it; add the leader’s ingress publication without waiting; Connected once it connects, Disconnected if it has not within the message timeout
SessionEvent(CLOSED)Session → PendingClose → Closed, even while a new leader’s publication is pending
Redirect during connectFollow leader_endpoints to new leader
New ingress publication (redirect or new leader)Keep every unicast ingress channel setting but the endpoint, and re-add IPC and multicast channels unchanged, so the message limits do not change
Auth challengePass to CredentialsSupplier, send ChallengeResponse
Auth rejectionClusterError::AuthRejected
Timeout (connect / poll / new-leader)ClusterError::Timeout / ClusterError::Disconnected
Listener panicClusterError::ListenerPanicked, session continues
Malformed egress frameClusterError::ProtocolError
Payload too largeClusterError::PayloadTooLarge
Publication backpressureRetryable ClusterError::Publication

What CI runs against a live cluster

The harness (cluster-test-harness/tests/) runs in ci.yml (aeron-cluster-integration, Aeron 1.53.3, Java 25) and in cluster-compatibility.yml (Aeron 1.46.8, Java 21, when cluster/ or sbe/src/ changes).

CoveredTest file
3-node connect, leader failover, redirectfailover.rs, failover_own_driver.rs, client_parity.rs, nonblocking.rs
New leader that never connects times outnonblocking.rs (a_new_leader_that_never_connects_times_out)
SessionEvent(CLOSED) while a new leader is pendingnonblocking.rs
Ingress channel settings kept across failover and redirectingress_channel_settings.rs
Fragmented egress, regular and controlled pollegress_fragmentation.rs
Restart, reconnect, quorum loss, log recoveryrestart.rs
Null and simple credentials (the default authenticator accepts all)auth.rs

Not covered by the harness: auth challenge and rejection, controlled-poll abort, and connect or poll timeout expiry. Unit tests in cluster/src/ (run by ci.yml’s test job) cover challenge dispatch (egress.rs), the challenge response (credentials.rs, client.rs) and the new-leader timeout (client.rs, test_new_leader_timeout_disconnects). No test drives ClusterError::AuthRejected, a controlled-poll abort, or a connect or poll timeout.

Limitations

  • No dynamic membership (static cluster only).
  • No snapshot/recovery integration.
  • No TLS/mTLS at the Aeron transport layer.
  • The cluster_codec_types module is #[doc(hidden)] and not stable API.