Releases: real-logic/aeron
1.47.0
Important Update: Aeron is moving to a new GitHub organisation
Aeron is moving to a new GitHub organisation following its adoption by Adaptive in 2022. This transition marks a significant milestone in Aeron's journey, ensuring continued innovation and support for the world's leading low-latency message transport system.
You can find the new Aeron, SBE and Agrona repositories and all related resources at aeron-io.
All links to the previous repository location are automatically redirected to the new location.
However, to avoid confusion, we recommend updating any existing local clones to point to the new repository URL. You can do this by using git remote
on the command line:
git remote set-url origin NEW_URL
Thank you for your continued support and contributions to the Aeron Open Source project.
Breaking changes
-
[Java] Agrona upgrade brings breaking changes. See 2.0.0 release notes.
Note:
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED
JVM option must be specified in order to run Aeron. In addition to--add-opens java.base/java.util.zip=ALL-UNNAMED
that is required to running the Aeron Archive.
Noteworthy Changes
-
Detect and terminate dormant Archive clients.
Archive will now send periodic heartbeat messages to each connected Archive client. By default it is done once per second and can be configured via
aeron.archive.session.liveness.check.interval
property or programmatically viaio.aeron.archive.Archive.Context#sessionLivenessCheckIntervalNs(long)
method. If it detects that it cannot send such a message for more than a connection timeout (i.e.aeron.archive.connect.timeout
, defaults to 5 seconds) then it will close the corresponding control session which will cause such Archive client to disconnect. -
Eliminate interference between Archive clients.
-
C/C++ Wrapper implementation of the Archive client APIs.
In terms of feature completeness and stability, they are still marked experimental, as there's a small chance some of the functions might change as the feature is hardened. Furthermore, a number of the async APIs have yet to be implemented.
-
Fix duplicate service messages during failover/restart when using multiple services in Cluster.
When service messages are being sent from multiple services, these can be enqueued in different orders. This means during failover/restart pending messages can be skipped or duplicated when a new leader is elected.
Upgrade procedure: Those affected will need to do a clean shutdown (with a snapshot) and restart the whole cluster with the fix.
-
Invalidate Standby snapshots.
When invalidating latest snapshot both normal and Standby snapshots are taken into account. In order to prevent invalidated snapshots from being re-downloaded from the Standby node upon recovery.
-
New log events for NAK messages sent and received.
NAK_RECEIVED
logging event was added when a NAK request is received by the sender. An existingSEND_NAK_MESSAGE
event was renamed toNAK_SENT
and logs a NAK message being sent by the receiver. -
Prevent client process crashing by a pathologically slow consumer.
If a call to
Controlled/FragmentHandler#onFragment
blocks for disproportionate amount of time, i.e. long enough for anImage
to become unavailable. Then the corresponding log buffer will freed by the client conductor thread. Any further access to the log buffer will cause the client process to segfault. TheImage
was updated to prevent any further access once it was closed.
Changelog
- [Java] Speedup
purgeSegments/deleteDetachedSegments
operations by only deleting files in a range between the current startPosition and the previous startPosition (purge) or the oldest existing segment file position (detached files). - [C] Fix dangling pointer in replay merge. (#1723)
- [Java] Prevent segfaults through mark file API after close.
- [Java] Trigger slow build on push to master.
- [Java] Do not close Cluster archive when doing next rounds of backup queries since the replay might still be active. Also do not switch to
RESET_BACKUP
state unless the current Cluster node has switched its role and therefore is no longer eligible for replay. - [Java] Use ClusterEvent instead of ClusterException with Category.WARN.
- [Java] Use ClusterEvent to report issues when stopping recording/replay + prevent an NPE when stopping a replay as
clusterArchive
could have been closed while in the BACKUP_QUERY stage. - [C/C++] Change interval of driver keepalive error reporting.
- [C] Update C driver to use the same matching logic as the Java driver for checking the validity of tagged publications and subscriptions.
- [CI] Core dump dir creation.
- [CI] Enable core dumps on Linux and MacOS.
- [CI] Collect Windows core dump files.
- [CI] Trigger slow build on PR.
- [C] compare publication stream id with link stream id when checking for matching spy subscriptions (#1722)
- [CI] Add
ubuntu-24.04-arm
to the build matrix for Java. - [CI] Use env to store base Java version.
- [Java] Handle multiple PendingServiceMessageTrackers while producing consensus module patch.
- [CI] Simplify log upload.
- [CI] Fix crash log upload on Windows.
- Bug/fix error with tagged channels reresolution (#1720)
- [C] add a call to init the new fields in the logbuffer metadata (#1717)
- [Java] Add the few missing fields for logbuffer descriptor (#1721)
- [Java] Close temporary MarkFile when migrating from old version.
- [Java] Write message header before mark file header in the
cluster-mark.dat
file to be able to use SBE features based on theactingBlockLength
andactingVersion
. - tidy up the namespace for exception_handler_t (#1715)
- [C] Handle connecting to Archive without credentials. (#1716)
- [Java] Write message header before mark file header in the
archive-mark.dat
file to be able to use SBE features based on theactingBlockLength
andactingVersion
. - [Java] Fix config not found issue.
- [Java] Extract capturing lambda allocation to outside loop and yield when not making progress.
- Replacement of ThreadHints.onSpinWait by Thread. (#1713)
- [Java] Add
archiveId
to the ArchiveMarkFile. - [Java] Fix an off-by-one error while searching for counters.
- [Java] Tidy up after #1711.
- [Java] Add a test for address re-resolution back to the initial IP address.
- fix resolution bug, when the new ip is back to udpChannel.remoteData, this can not be triggered
resolution changes
(#1711) - [Java] Use different URI for early access JDK build.
- [Java] Fix Javadoc URI.
- [Java] Run Mockito as Java agent for JDK 23+ compatibility.
- [CI] Add JDK 23 to the build matrix.
- [Java] Change comment prevent JDK23 javadoc warning, FIX #1710.
- [C] Prevent double free of the aeron_exclusive_publication_t which is closed by the proxy.
- [Java] Poll for remote Archive errors while awaiting log recording session to be created.
- [Java] Add OS max/default values for SO_SNDBUF and SO_RCVBUF parameters to the log buffer metadata section.
- [C] Add OS default/max fields for the
OS_SNDBUF/OS_RCVBUF
to the log buffer metadata section. - Fixes problem with socket snd/rcv buffer in logbuffer metadata. (#1707)
- [Java] Add method to convert error code to String.
- [Java] Remove remaining dynamic join APIs.
- [Java] Move config printing option to the CommonContext.
- [Java] Cleanup after #1705.
- rename the null value to compatible with C++ (#1705)
- [Java] Touch ups.
- Logbuffer metadata extra fields (#1700)
- [C] Rename
SEND_NAK_MESSAGE
toNAK_SENT
so that it is symmetric withNAK_SENT
- [C] Add
AERON_DRIVER_EVENT_NAK_RECEIVED
event logging. - [Java] Rename
SEND_NAK_MESSAGE
toNAK_SENT
so that it is symmetric withNAK_SENT
. - [Java] Add log event for when a NAK message is received.
- Fix duplicate service messages during failover/restart when using multiple services (#1703)
- [Java] Change Tests.sleep so that it uses LockSupport.parkNanos to prevent catching of InterruptedException and clearing the interrupt flag.
- [C] Remove duplicate definition of aeron_semantic_version_compose. (#1701)
- [Java] Close AeronArchive client if control response Subscription is disconnected.
- [Build] correct release gradle cache path
- [Java] Rename IngressAdapter onFragment to onMessage and remove interface to provide more appropriate naming.
- [Build] Remove OSS c/c++ binary step in release workflow
- [Java] Simplify synchronous connect.
- [Java] Use Agrona Checksum classes.
- [Java] Emit WARN event when ControlSession is closed abruptly + add reason to the ControlSession state transition log + increase default stale session check interval to 1s.
- [Java] Fix
shouldRejoinAfterResting
test. - [Java] Add isConnected to Subscription.toString.
- [Java] Add more detail to AeronArchive exception when subscription is not connected.
- [Java] Add test utility for stubbing addition of counters.
- [C] Close uri after parsing.
- [C] Fix printing of the error message.
- [C] Add
stream-id
andpub-wnd
URI parameters. - [C] Add
AERON_ERROR_CODE_IMAGE_REJECTED
andAERON_ERROR_CODE_PUBLICATION_REVOKED
error codes. - [Java] Add
IMAGE_REJECT
andPUBLICATION_REVOKE
error codes. - [Java] Fix a race condition in
shouldRecordThenBoundReplayWithCounter
. - [C] Align logging for
aeron_driver_conductor_on_publication_error
with the Java implementation. - [Java] Use AeronEvent when logging onPublicationError and add additional parameters.
- [C++] Close broadcast_receiver to avoid leaking scratch buffer memory.
- [C] Make broadcast_receiver scratch buffer expandable to accommodate for large responses from the media driver.
- [C] Reset
aeron_uri_t
struct before parsing so that cleanup would not fail with a segfault. - [Java] Validate that channel URI ...
1.46.8
1.44.6
- [Java] Update RecoverPlan after standby snapshot replication completes with the replicated snapshot entries.
1.46.7
- [Java] Prevent an untethered subscription re-joining the stream at an old position.
1.44.5
- [Java] Prevent an untethered subscription re-joining the stream at an old position.
1.45.1
- [Java] Prevent an untethered subscription re-joining the stream at an old position.
1.46.6
- [Java] Fix a performance regression in
ControlTransportPoller/DataTransportPoller
when the number of transports is larger than five, i.e. thebytesReceived
count was zero and as a resultIdleStrategy.idle()
was invoked on each duty cycle. - [Java] Assert that synchronous ControlSession calls are only allowed from a conductor thread.
- [C] Check subscribed sessions before removing a stream interest before removing by stream_id.
- [Java/C] Do not fail fast on I/O exceptions in the send/receive path, i.e. process remaining transports/publications/destinations in the same duty cycle.
- [Java] Make it clear that appointed leader config is a testing feature only.
- [Java] Keep publishing position updates from canvass and into nominate state so other cluster node members can take action in extended election timeout duration.
- [Java] Track total snapshot duration on the follower nodes.
- [Java] Upgrade to Agrona 1.23.1.
1.44.4
- [C] Check subscribed sessions before removing a stream interest before removing by stream_id.
- [Java] Add end-to-end test for session interest fix.
1.46.5
- [Java] Delete segment files without renaming so that the Archive conductor thread will not be blocked for a long period of time.
- [Java] Remove expensive file existence checks when scheduling segment file deletion.
1.46.4
- [C] Align loss and SMs handling between Java and C media drivers.