Releases: aeron-io/aeron
Release list
1.48.6
- [Cluster] Prevent standby replicated snapshots getting stuck if the address on the standby entry is invalid.
1.47.7
- [Cluster] Prevent standby replicated snapshots getting stuck if the address on the standby entry is invalid.
- [Java] Publish artifacts to Central Portal using OSSRH Staging API.
1.48.5
- [Java] Add
ALLOW_ALLandDENY_ALLauthorisation supplier options for the Archive. - [Java] Add
ALLOW_ALLandDENY_ALLauthorisation supplier options for the ConsensusModule. - [Archive] Copy
response-endpoint,ttlandstream-idURI parameters from the original channel definition when creating recordings and replays. - [Archive] Do not abort
ControlSessionafter it was closed and prevent multipleabortcalls from overwriting each other. - [Archive] Do not log warning when control response publication is disconnected or a control request image is going away, i.e. treat those events as normal client termination. To avoid unnecessary warnings when
AeronArchiveis being closed and there is a race betweenclosemessage arriving at the Archive and images going unavailable or publication disconnecting. - [C] Fix client build to properly resolve
-DHAVE_BSDSTDLIB_H -DHAVE_ARC4RANDOM. (#1836) - [C] Fallback to
/dev/urandomifarc4randomis not available. - [C] Add aeron_archive_wrapper's own sources to the
target_include_directories. (#1835) - [C] Send client_close command to media driver when aeron is closing. (#1837)
- [C] Add missing assignment operator to match the copy constructor.
- [C] Error handling fixes for destination and endpoint creation.
- [C] Use static structs for holding loss state and cleanup dynamically allocated memory during initial load. (#1833)
- [C] Bump
CMaketo 4.0.3.
1.44.7
- [Archive] Copy
ttlURI parameter from the original channel definition when creating recordings and replays. To ensure that the control stream will use the same TTL setting as the incoming data stream. - [C/C++ Wrapper] Include
<chrono>to fix compilation error on Windows. - [Java] Backport releasing to Maven Central Portal.
1.48.4
- [C] Fix
aeron_cnc_is_file_length_sufficient, i.e. take into account error buffer length. (#1828) - [C] Preserve
agent_on_start_funcoverride during driver startup procedure. (#1826) - [C++ Wrapper] Add methods to get the
registrationIdof an asynchronously created resource. - Breaking: [Cluster] Allow
ConsensusModuleExtensionto do work while election is in progress. (#1827) - [Cluster] Add
-extsuffix toConsensusModuleExtensionarchive client request and response channel aliases. - [Driver] Add
fragmentedFrameLengthgetter toHeader. (#1829) - [AeronArchive] Allow
NOT_CONNECTEDto be returned without throwing an exception before client is closed. - [Cluster] Fix
ClusterToolOperator#queryClusterMembersreturn value when query times out. - [Java] Bump
Agronato 2.2.4. - [Java] Bump
SBEto 1.35.6. - [Java] Bump
ByteBuddyto 1.17.6 - [Java] Bump
Shadowto 8.3.7. - [Java] Bump
JUnitto 5.13.2. - [Java] Bump
Checkstyleto 10.26.0. - [Java] Bump
jgitto 7.3.0.202506031305-r.
1.48.3
- [Java/C] Use
untethered-linger-timeoutin IPC publications. - [Java] Bump
Agronato 2.2.3. - [Java] Bump
SBEto 1.35.5.
1.48.2
- [Java/C/C++] Poll Archive client on slow duty cycle. (#1817)
- [C] Close send channel endpoints immediately once they have been released by the sender thread, don't wait for a managed resource cycle. (#1816)
- [Java] Cluster tool exit code bugfix. (#1818)
- [Java] Fix IndexedReplicatedRecording LIVE_CHANNEL config (#1815)
- [Java] Bump
JUnitto 5.13.1.
1.48.1
- [C++] Add warning that C++ API will be removed in 1.50.0.
- [Java] Publish artifacts to Central Portal using OSSRH Staging API.
- [Java] Bump
Agronato 2.2.2. - [Java] Bump
SBEto 1.35.3. - [Java] Bump
JGitto 7.2.1.202505142326-r. - [Java] Bump
Checkstyleto 1.25.0. - [Java] Bump
Gradle8.14.2.
1.48.0
Noteworthy Changes
-
ExclusivePublication#revoke.Release publisher and subscriber resources immediately with exclusive publication revoke. Publication will not linger and not allow any trailing loss to be resolved. Subscription will not wait for any data to be received.
NB: Media driver and client code (publisher and subscriber) must run Aeron 1.48.0 or higher.
For more information see Publication#revoke wiki page.
-
Image#reject.Reject incoming sessions from a publisher. This allows you to quickly stop data flow in scenarios where the data is no longer needed or is invalid.
For more information see Image#reject wiki page.
-
Track connection status in
AeronCluster.AeronClusternow contains a state machine to track connection status. The state machine is updated during poll operations (AeronCluster#pollEgressandAeronCluster#controlledPollEgress) and while sending data to the Cluster (i.e.AeronCluster#offer,AeronCluster#tryClaim,AeronCluster#sendKeepAlive). If a break in communication is detected and it lasts for more thanAeronCluster.Context#newLeaderTimeoutNs()thenAeronClusterwill close itself.NB: When
AeronCluster.Context#newLeaderTimeoutNs()is not set theAeronClusterwill wait for double the leadership timeout from an actual Cluster. If that is not available (i.e. Cluster is running on an older Aeron version) then it will fallback to a 10 seconds default value, i.e. will wait for 20 seconds.If
AeronCluster#ingressPublicationorAeronCluster#egressSubscriptionare used directly then it is a user responsibility to call new APIs in order to update the connection tracking state machine, i.e.:- After each invocation of the
offer/tryClaimon theAeronCluster#ingressPublicationa call toAeronCluster#trackIngressPublicationResultmust be made. - Every time
AeronCluster#egressSubscriptionis polled a call toAeronCluster#pollStateChangesmust be made.
- After each invocation of the
-
Response channels GA.
Response channels have been promoted from experimental to General Availability. Users no longer need to enable experimental features to use this feature.
-
C & C++ wrapper Archive client APIs GA.
The APIs have been promoted from experimental to General Availability, achieving feature-completeness and parity with Java. Old C++ APIs will be decommissioned in 1.50.0.
-
Per-stream NAK counters.
Two new stream-specific NAK counters where added:snd-naks-received(typeId=19) - tracks the number of NAKs received by the sender.rcv-naks-sent(typeId=20) - tracks the number of NAKs sent by the receiver.
-
Affinity setting
AERON_DRIVER_ASYNC_EXECUTOR_CPU_AFFINITYfor async thread (aeron_executor) was removed. -
Retransmit Receiver Window Multiple
To avoid overwhelming receivers in the event of retransmissions, Aeron limits the amount of data sent in a single retransmission to a multiple of the receiver window. Previously, this multiple was 16 for unicast, 16 for min and tagged multicast, and 4 for max multicast. It now defaults to 16 for unicast, 4 for all multicast strategies, and can be configured with the properties
aeron.unicast.flow.control.rrwmandaeron.multicast.flow.control.rrwm. -
Linger timeout
There is a new option to control how long untethered subscriptions will linger before being removed from flow control. If the new untethered linger timeout is not set, the default timeout is equal to the untethered window limit timeout. Previously, the untethered linger timeout was always equal to the window limit timeout. Now they can be changed independently. The new property name is
aeron.untethered.linger.timeout. It can also be set viauntethered-linger-timeoutURI parameter.
Changelog
- [Java] Initialize
archiveIdearly using CnC file if Aeron instance is not specified. - [Java] Close extension's Archive client.
- [Java] Close snapshot replication before replay and recording are closed.
- [Java] Adjust archive client name based on the configuration.
- [C] Add client name for the implicit Aeron client created by the Archive client.
- [Java] Name implicit Aeron clients based on their usage.
- [C] Use
untethered-linger-timeouton the receiver side. - [Java] Store
untethered-linger-timeoutin the log buffer metadata. - [Java] Fix a bug where
untethered-linger-timeoutwas not added to the resulting URI. - [Java] Use
untethered-linger-timeouton the receiver side. - [Java] Use
Publication#revokeandImage#rejectto closeControlSessionresources. - [Java] Use
Publication#revoketo abort replay session. - [Java] Don't through an exception when failing to copy a file within the data collector. This breaks other parts of the data collection on test failure (e.g. event log capture).
- [C] Flow control retransmit receiver window multiple for C driver. (#1807)
- [C] C version of untethered linger timeout. (#1808)
- [Java] Require
ArchiveThreadingMode.INVOKERif MediaDriver is running in the invoker mode. - [Java/C] Per stream NAKs. (#1806)
- [Java] Add separate linger timeout for untethered subscriptions. (#1801)
- [Java/C]
Publication#revoke. (#1781) - [Java] Make cluster publish leader heartbeat timeout to clients. (#1805)
- [Java] Require Aeron client to run in the invoker mode if MediaDriver is running with
ThreadingMode.INVOKER, i.e.Aeron.Context.useConductorAgentInvoker(true)must be set whenAeron.Context.driverAgentInvoker()is set. - [Java] Add event code type for sequencer.
- [Java/C]
Image#reject. (#1785) - [Java] Fsync
archive.catalogfile to disc when shutting down Archive. - [C] Align flow control receiver timeout with Java, i.e. use
AERON_FLOW_CONTROL_RECEIVER_TIMEOUTenv variable instead ofAERON_MIN_MULTICAST_FLOW_CONTROL_RECEIVER_TIMEOUT. - [Java] Remove legacy
aeron.MinMulticastFlowControl.receiverTimeoutconfig option, i.e. useaeron.flow.control.receiver.timeoutdirectly. - [C] Remove experimental feature flag for response channels.
- [Java] Remove experimental option for response channels for the response channels.
- [C] MDC short send fix. (#1770)
- [Java] Flow control retransmit receiver window multiple (#1800)
- [Java] Prevent potential silent message loss on cluster ingress/egress.
- [Java] Make AeronCluster track connection status.
- [Java] Create new Ping message for archive client keepalive. (#1799)
- [Java] File page aligned mark files. (#1789)
- [Java] Increment snapshot counter after standby snapshots were successfully replicated.
- [Config] Update code style to reduce use of '.*' imports.
- [Java] Improve storage space exception detection.
- [Java] Properly check for EOS flag. (#1795)
- [C] Fix issue for untethered slow consumers impacting whole server. (#1792)
- [C++ Wrapper] Remove 'experimental' indicator for C/C++ wrapper archive APIs. (#1793)
- [Java] Refactor session liveness check.
- [C] Use
async-executorname for the async thread, i.e. align with the Java impl. - [Java] Use
async-executorprefix for async threads. - [Bash] Simplify thread affinity listing.
- [Java] Surface method to describe extension snapshot content in ClusterTool. Support printing snapshot entries as hex dumps.
- [C++] Add
#include <cstdint>. - [C++ Wrapper] Add missing header. (#1786)
- [C] Remove affinity settings for the async thread (
aeron_executor). - [Java] Add TestIdleStrategy.
- [Java] Synchronize session ids across cluster nodes. (#1774)
- [CI] Add Clang 20 to the build matrix.
- [C] Call close_session in
archive_close(). (#1778) - [Java] Added close reason to consensus module extension call back on session close.
- [C] Create log buffers sparse by default.
- [Java] Create log buffers sparse by default.
- [Java] Add context to the disconnected control session warning message, i.e. show the response streamId/channel pair to help identify client that was disconnected.
- [Java] Use separate fragment assemblers for IPC and UDP inputs.
- [C++ Wrapper] Sync
addAliasIfAbsentmethod to ChannelUri. (#1755) - [C++ Wrapper] Allow setting the recording events channel. (#1768)
- [Java] Use
MarkFile#timestampRelease. - [C++ Wrapper] fix uri_buffer length in
Subscription.tryResolveChannelEndpointPort(). (#1767) - [Java] Don't report error if the publication is closed or not connected during replay.
- [Doc] Document the reserved range for Aeron counter typeIds. (#1771)
- [Java] Update
sub-posiff the image was not closed. Otherwise, the JVM might crash withSIGSEGVwhile accessing closedPosition. - [CMake] Only link to client for signal test.
- [C] Add TERM signal handling to C media driver and supporting test.
- [C] Add missing header. (#1765)
- ...
1.47.5
[Driver] Check if EOS flag bit is set instead of the entire mask. (#1795)
[Driver] Record bytes lost in the loss report only once when a loss is detected, i.e. do not count the same loss when resending NAKs. (#1796)
[Driver] Prevent NetworkPublication's pub-lmt from wrapping around into the dirty term. (#1794)
[Cluster] Prevent ConsensusModule's state (nextSessionId) diverging between leader and follower nodes when a session is rejected during the authentication phase. (#1774)
[Cluster] Only send TerminationAck to the leader that requested it. (#1797)
[Cluster] Use separate fragment assemblers for IPC and UDP inputs.
[Client: C] Do not update image list change number when retaining/releasing images as those can be called from a client conductor thread.
[Client: C++ Wrapper] Use const on Context.h copy constructor.
[Archive Client: C] Call close_session() in archive_close(). (#1778)