Skip to content

Releases: real-logic/aeron

1.47.0

17 Jan 22:59
Compare
Choose a tag to compare

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 via io.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 existing SEND_NAK_MESSAGE event was renamed to NAK_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 an Image 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. The Image 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 the actingBlockLength and actingVersion.
  • 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 the actingBlockLength and actingVersion.
  • [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 to NAK_SENT so that it is symmetric with NAK_SENT
  • [C] Add AERON_DRIVER_EVENT_NAK_RECEIVED event logging.
  • [Java] Rename SEND_NAK_MESSAGE to NAK_SENT so that it is symmetric with NAK_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 and pub-wnd URI parameters.
  • [C] Add AERON_ERROR_CODE_IMAGE_REJECTED and AERON_ERROR_CODE_PUBLICATION_REVOKED error codes.
  • [Java] Add IMAGE_REJECT and PUBLICATION_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 ...
Read more

1.46.8

13 Jan 15:12
Compare
Choose a tag to compare

[Java] Re-resolve endpoint address when address changes back to the original one. (#1711)
[Java] Update RecoverPlan after standby snapshot replication completes with the replicated snapshot entries.

1.44.6

11 Nov 10:49
Compare
Choose a tag to compare
  • [Java] Update RecoverPlan after standby snapshot replication completes with the replicated snapshot entries.

1.46.7

25 Oct 14:11
Compare
Choose a tag to compare
  • [Java] Prevent an untethered subscription re-joining the stream at an old position.

1.44.5

25 Oct 13:44
Compare
Choose a tag to compare
  • [Java] Prevent an untethered subscription re-joining the stream at an old position.

1.45.1

24 Oct 13:10
Compare
Choose a tag to compare
  • [Java] Prevent an untethered subscription re-joining the stream at an old position.

1.46.6

15 Oct 10:47
Compare
Choose a tag to compare
  • [Java] Fix a performance regression in ControlTransportPoller/DataTransportPoller when the number of transports is larger than five, i.e. the bytesReceived count was zero and as a result IdleStrategy.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

10 Oct 12:43
Compare
Choose a tag to compare
  • [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

28 Sep 10:55
Compare
Choose a tag to compare
  • [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

25 Sep 12:58
Compare
Choose a tag to compare
  • [C] Align loss and SMs handling between Java and C media drivers.