Releases: aeron-io/aeron
Release list
1.50.1
Changelog
- [Cluster] Fix single-node cluster leader re-election which could happen after a stall or a time jump.
- [Driver/Archive/Cluster] Increase default cycle thresholds to
100msas the previous value of1mswas too short and their counts kept ticking up under normal conditions. - [Archive] Fix
CATALOG_RESIZEdebug logging.
1.50.0
New & Noteworthy
-
[Breaking] Remove deprecated standalone C++ API. The C++ Wrapper API should be used instead.
-
The
interfacechannel parameter now accepts network interface names in the{interface-name}format, e.g.interface={eth0}.When used with multicast channels, it specifies the interface to join with and send on.
The
interfaceparameter might sometimes be used with non-multicast channels to control the local address of a socket.
In those cases, the socket will be bound to an address of an appropriate family assigned to the named interface.
If there are multiple matching addresses available, it's unspecified which one will be used.
It's also possible to specify the port used with the resolved address by using the{interface-name}:portformat.
Changelog
- [Archive] Do not set
session-idon the replay channel if response channels are used to avoidsession-idclash. - [Archive] Default
AeronArchive.Context.Archiveinstance is configured withRethrowingErrorHandlerfor Subscriptions. - [Archive] Allow asynchronously connecting to Archive using AgentInvokers.
- [Archive] Format size and duration parameters when using
ChannelUriStringBuilderto create full channel URI. - [Archive] Use the configured control term buffer length for the replication client instead of hardcoding
64k. - [Archive/Java/C/C++Wrapper] Make message retry attempts for
aeron_archiveconfigurable. (Java PR: #1885) - [Archive] Ensure that errors from
ReplaySessionare both captured in the error log and sent to the control session. Improve error messages. - [Cluster] Prevent fast follower node from consuming log ahead of the commit position when majority lags behind. (#1898)
- [Cluster] Prevent infinite loop while awaiting service ACKs if services terminated/crashed.
- [Cluster] Add reason to the
STATE_CHANGEevent. Always quotereasonvalue across all events. - [Cluster] Default
AeronCluster.Context.Archiveinstance is configured withRethrowingErrorHandlerfor Subscriptions. - [Cluster] Add support for
AgentInvoker/Aeron.conductorAgentInvokertoAeronCluster#asyncConnect. - [Cluster] Add log event for
Votemessage, i.e. a response toRequestVote. - [Cluster] Handle quorum commit position going backwards.
- [Cluster] Make default Cluster consensus channel use UDP term length of the media driver instead of assigning
term-length=64k. With the Aeron defaults this increases the term length from64KBto16MB. - [Cluster] Unconditionally set
reliable=trueon the ingress subscription to ensure that the ingress stream is reliable. - [Cluster] Ignore unknown schema messages (e.g. from Sequencer) in
EgressPoller. - [Cluster] Make
AeronCluster.asyncConnectfully asynchronous by usingAeron#asyncAddExclusivePublication/asyncAddPublicationAPI when dealing with redirect requests in case no valid existing leader publication was found. - [Cluster] Reuse existing leader ingress publication if it is still valid when receiving redirect response.
- [Cluster] Only consider active members when computing
hasQuorumAtPosition. We now always await for the active quorum of nodes o reach target position. RemovehasVotersAtPositionsince it is no longer used. - [Cluster] Refactor
isCandidatechecks and document why we must consider all existing members when doing so. We cannot check only the "active" nodes since that breaks the nomination phase whereby the nodes will stop proposing themselves as candidates oncetimeOfLastAppendPositionNsstops advancing. - [Cluster] Only consider active Cluster members when computing the quorum position.
- [Cluster] Consistently update follower position, i.e. always set
logPosition,leadershipTermIdandtimeOfLastAppendPositionNstogether. Add missing update of the follower info upon receivingCanvassPosition. - [Cluster] Increment snapshot counter after updating snapshot duration tracker to avoid a race in a test.
- [Java/C] Allow to specify network interface name in the interface channel parameter. (#1901)
- [Driver] Do not append threading mode to the name resolver cycle counters.
- [C] Fix threshold formatting + format threshold info for the name resolver cycle tracker.
- [C] Remove duty cycle threshold limit of 1 hour.
- [C] Format duty cycle threshold before adding to the driver counters.
- [Java] Use
SystemUtil#formatDurationto formatthresholdfor the duty cycle tracker counters. - [C] Set
ownerIdfor each stream counter created via client command (e.g.ADD_PUBLICATION). - [Java] Set
ownerIdfor each stream counter created via client command (e.g.ADD_PUBLICATION). - [Java] Add Publication type to the counters and log buffer metadata, i.e.
pub-poscounter now has a suffix ((concurrent)or(exclusive)depending on the type) and log buffer metadata contains a new fieldtype(unit8) at offset 497 which can have values0(concurrent publication),1(exclusive publication) or2(publication image). - [C] Add Publication type to the counters and log buffer metadata, i.e.
pub-poscounter now has a suffix ((concurrent)or(exclusive)depending on the type) and log buffer metadata contains a new fieldis_exclusive_publication(unit8) at offset 497. - [Driver/C] Increase sender/receiver IO vector capacity and publication max messages per send to
4from2. - [C] Do not throttle sends to one per call if short sends are encountered.
- [Driver/C/Java] Add
EF_VI,VMA,ATS,DPDKandSelectorcounter types. Synchronize Java and C counter definitions. - [C] Add
aeron_format_duration_ns. - [C] Add
aeron_format_size64. - [C] Refactor duration and size parsing.
- [C] Fixes data races on AERON_GET_ACQUIRE and AERON_SET_RELEASE usages. (#1902)
- [C] Fixes broken atomic instructions. (#1905)
- [C] Replace
__asm__ volatilewith__asm__ __volatile__just like in Linux kernel. - [C] aeron_atomic64_gcc_x86_64.h acquire/release fixes (#1904)
- [C] Optimized register allocation aeron_atomic64_gcc_x86_64h (#1910)
- [C] Fix aeron_log_buffer.c mem leak (#1907)
- [C] Fixed aeron_agent_init role_name bugs. (#1908)
- [C] Do not resolve
endpointwith ephemeral port for MDS subscription. Copy original channel as-is if no resolution is performed. - [Java] Do not resolve
endpointwith ephemeral port if MDS is used. - [Java] Parse channel lazily when
tryResolveChannelEndpointPortis called. - [Java] Fix
Subscription#tryResolveChannelEndpointPortwhen no addresses exist, i.e. returnnullif active address is not yet available. Also cache results and avoid doing any work ifendpointis not defined or does not contain a port zero. - [Java] Fixed StatusIndicator deprecated method usage. (#1895)
- [Java] Replaced the AtomicCounter.getWeak usages by getPlain. (#1893)
- [Java] Replaced Counter.getAndAddOrdered by getAndAddRelease. (#1894)
- [Java] Add per-stream counters to
StreamStatand extract counter name from label instead of relying on static mapping by type. - [C] fix: double free in
aeron_archive_context_t. (#1897) - [C] Make
aeron_subscription_image_releaseandaeron_subscription_image_retainno op if image is not found in the
current image list, i.e. handle a case ofon_unavailable_imagebeing called and attempting to retain an image that
was already removed (i.e. C++ Wrapper)). - [C] invoke the client when in
aeron_archive_replay_merge_close. (#1873) - [C] Handle
aeron_archive_encoded_credentials_tbeingNULLas well asdatafield beingNULL, i.e. treat both as empty credentials. - [C] Fix race condition in
aeron_archive_clientreentrancy check, i.e. first acquire lock and then do the check. Use
mutex to protectaeron_archive_closefrom concurrent execution. - [C] Create
aeron_mutex_tas recursive/reentrant on POSIX systems, i.e. match behavior on Windows and the Java implementation. - [C] Fix missing mutex unlock in case of an error.
- [Cluster] Optimize redirect handling in
AeronCluster: reuse existing publication if available and use async API
to connect to the leader otherwise. - [Cluster] Protect against NPE during follower catchup if recording is stopped, because the leader transitions to a
follower and stops sending log. - [Driver/C] Perform sender address re-resolution checks on a fixed schedule rather than awaiting next control
polling cycle, i.e. align behavior with theSender#doWorkimplementation. - [Driver/Java] Perform full name and address matching in driver name resolver. Add tests to ensure partial matches
are not allowed. Remove allocations when matching neighbors by address. - [Driver/C] Fix segfault when invalid name resolver configuration is provided. Cleanup allocated resources to avoid
leaking memory. - [Driver/C] Use
aeron_interface_parse_and_resolveto resolveaeron.driver.resolver.interfaceparameter, i.e.
skip theaeron_find_interfacechecks. This aligns the implementation with theDriverNameResolverin Java. Fix
filtering o...
1.49.3
- [Cluster] Ignore messages from unknown schemas (e.g. from Sequencer) in
EgressPoller. - [Archive] Ensure that errors from
ReplaySessionare both captured in the error log and sent to the control session. - [C] fix double free in
aeron_archive_context_t. (#1897) - [C] Make
aeron_subscription_image_releaseandaeron_subscription_image_retainno op if image is not found in the
current image list, i.e. handle a case ofon_unavailable_imagebeing called and attempting to retain an image that
was already removed (i.e. C++ Wrapper)). - [C] invoke the client when in
aeron_archive_replay_merge_close. (#1873) - [C] Handle
aeron_archive_encoded_credentials_tbeingNULLas well asdatafield beingNULL, i.e. treat both as empty credentials. - [C] Fix race condition in
aeron_archive_clientreentrancy check, i.e. first acquire lock and then do the check. Use
mutex to protectaeron_archive_closefrom concurrent execution. - [C] Create
aeron_mutex_tas recursive/reentrant on POSIX systems, i.e. match behavior on Windows and the Java implementation. - [C] Fix missing mutex unlock in case of an error.
1.49.2
- [C] Do not resolve
endpointwith ephemeral port for MDS subscription. Copy original channel as-is if no
resolution is performed. - [Java] Fix
Subscription#tryResolveChannelEndpointPortwhen no addresses exist, i.e. returnnullif active
address is not yet available. Avoid doing any work ifendpointis not defined (IPC, MDS, response channel) or does not
contain a port zero. - [C] Add
aeron_is_frame_validmethod. - [C/Java] Add all missing counter type constants for the premium components.
- [C] Do not truncate frames longer than 1408 bytes when logging, i.e. allow up to
AERON_MAX_UDP_PAYLOAD_LENGTH
(65504) bytes instead. - [C] Ensure that fallback
receiverIdcannot be zero. - [Java] Improve mark file APIs: use high-level operations to signal ready/terminated, reset activity timestamp
upon failure, update tests to reflect activity timestamp changes during startup sequence. - [Java/C] Fix formatting of large values and counter ids in
AeronStat. - [Java/C] Add dissector for the
ERR(0x04) frame type. - [Java] Add version information to
ComponentLoggerand print enabled loggers upon agent startup. - [C] Print enabled loggers upon agent startup and their versions.
- [C] Add function to counter number of leading zeroes in 64 bit value (
aeron_number_of_leading_zeroes_u64). - [C] Add ability to counter number of digits in a 32-bit number (
aeron_digit_count). - [C] Link
aeron-clientagainstlibbsd. - [Java] Delete
DeduplicateTask, i.e. use built-in capabilities of the Shadow plugin instead. - [Java] Upgrade to https://github.com/aeron-io/agrona/releases/tag/2.3.2[Agrona 2.3.2].
- [Java] Upgrade to https://github.com/aeron-io/simple-binary-encoding/releases/tag/1.36.2[SBE 1.36.2].
- [Java] Upgrade to
ByteBuddy1.17.8. - [Java] Upgrade to
ASM9.9. - [Java] Upgrade to
JUnit6.0.1. - [Java] Upgrade to
Checkstyle12.1.1. - [C] Upgrade to
CMake4.1.3.
1.48.10
- [C] Add
aeron_is_frame_validmethod. - [C/Java] Add all missing counter type constants for the premium components.
- [C] Do not truncate frames longer than 1408 bytes when logging, i.e. allow up to
AERON_MAX_UDP_PAYLOAD_LENGTH
(65504) bytes instead. - [C] Ensure that fallback
receiverIdcannot be zero. - [C] Link
aeron-clientagainstlibbsd.
1.48.9
- [Driver/Java/C] Add log dissectors for
ERR(0x04) frame type. - [Java] Delete
DeduplicateTask, i.e. use built-in capabilities of theShadowplugin instead. - [Java] Upgrade to
Shadow9.2.2.
1.49.1
- [Cluster] Optimize redirect handling in
AeronCluster: reuse existing publication if available and use async API
to connect to the leader otherwise. - [Cluster] Protect against NPE during follower catchup if recording is stopped, because the leader transitions to a
follower and stops sending log. - [Driver/C] Perform sender address re-resolution checks on a fixed schedule rather than awaiting next control
polling cycle, i.e. align behavior with theSender#doWorkimplementation. - [Driver/Java] Perform full name and address matching in driver name resolver. Add tests to ensure partial matches
are not allowed. Remove allocations when matching neighbors by address. - [Driver/C] Fix segfault when invalid name resolver configuration is provided. Cleanup allocated resources to avoid
leaking memory. - [Driver/C] Use
aeron_interface_parse_and_resolveto resolveaeron.driver.resolver.interfaceparameter, i.e.
skip theaeron_find_interfacechecks. This aligns the implementation with theDriverNameResolverin Java. Fix
filtering out of self entries, i.e. use full name matching instead of a prefix match.
1.48.7
- [Driver/C] Fix
UNTETHERED_SUBSCRIPTION_STATE_CHANGElogging, i.e. log previous state and add missing logging to
aeron_publication_image. - [Driver/C] Ensure
rcv-naks-sentcounter is cleaned up if publication image creation fails. - [Driver/C] Prevent sending empty NAK message upon initial connection to the publisher.
- [Driver/C] Ignore NAKs with zero length and treat NAKs with negative length as invalid packets.
- [Driver/Java] Ignore NAKs with zero length and treat NAKs with negative length as invalid packets.
- [Driver/Java] Fix connectivity status handling in
NetworkPublication, i.e. do not transition toNOT_CONNECTED
when the last remote subscriber disconnects if there is at least one spy and spies simulate connection (ssc=true). - [Driver/C] Fix connectivity status handling in
aeron_network_publication, i.e. do not transition to
NOT_CONNECTEDwhen the last remote subscriber disconnects if there is at least one spy and spies simulate connection
(ssc=true). - [Driver/Java] Handle connection status updates for untethered IPC subscribers.
- [Driver/C] Handle connection status updates for untethered IPC subscribers.
- [Agent/C] Remove extraneous
]suffix fromCMD_IN_REMOVE_PUBLICATION,CMD_IN_REMOVE_SUBSCRIPTIONand
CMD_IN_REMOVE_COUNTERlog events. - [Driver/C] Perform sender address re-resolution checks on a fixed schedule rather than awaiting next control
polling cycle, i.e. align behavior with theSender#doWorkimplementation. - [Driver/Java] Perform full name and address matching in driver name resolver. Add tests to ensure partial matches
are not allowed. Remove allocations when matching neighbors by address. - [Driver/C] Fix segfault when invalid name resolver configuration is provided. Cleanup allocated resources to avoid
leaking memory. - [Driver/C] Use
aeron_interface_parse_and_resolveto resolveaeron.driver.resolver.interfaceparameter, i.e.
skip theaeron_find_interfacechecks. This aligns the implementation with theDriverNameResolverin Java. Fix
filtering out of self entries, i.e. use full name matching instead of a prefix match.
1.49.0
New & Noteworthy
-
[Driver] Support for IPC media was added to response channels. (#1761)
The feature works exactly the same as for UDP media but does not require
controlendpoint to be specified.For an example see
ResponseChannelsTest#shouldConnectResponsePublicationUsingImageAndIpc. -
[Driver] Add support for
response-correlation-id=prototypeto allow pre-creating response publications to
reserve and hold onto a local port. (#1863)For usage example see ResponseChannelsTest.
-
[Driver] Add API to create counters asynchronously.
Counters can now be created asynchronously using
Aeron.asyncAddCounterandAeron.asyncAddStaticCountermethods.
Created counter is returned by theAeron.getCountermethod. There is alsoAeron.asyncRemoveCounterto asynchronously
remove counter byregistrationId.For usage example see
CounterTest#shouldAddCounterAsynchronously,
CounterTest#shouldAddCounterAsynchronouslyUsingLabelAndTypeId
and
CounterTest#shouldAddStaticCounterAsynchronously. -
[Archive] Named Archive clients.
Client name can be specified using
AeronArchive.Context.clientName(java.lang.String)API or
aeron.archive.client.namesystem property. Once specified the name will be sent to the Archive with connect request
along with additional information such as client version. Archive will add a newcontrol-sessioncounter
(typeId=113) for each connected client:control-session: name=test client 5 version=1.49.0-SNAPSHOT commit=e79ebfa4ff sourceIdentity=127.0.0.1:51360 sessionId=1083930759 - archiveId=519
-
[Cluster] Named Cluster clients.
Client name can be specified using
AeronCluster.Context.clientName(java.lang.String)API or
aeron.cluster.client.namesystem property. Once specified the name will be sent to the Cluster with connect request
along with additional information such as client version. Cluster will add a newcluster-sessioncounter
(typeId=241) for each connected client:cluster-session: name=test client version=1.49.0-SNAPSHOT commit=4ac30af55a sourceIdentity=127.0.0.1:54444 sessionId=325223904 - clusterId=0
-
[Cluster] Default Authorisation Service
Updated the default
AuthorisationServiceto allow heartbeat and standby-snapshot requests, which are required for Aeron Cluster Standby. -
[Breaking]
org.agrona.concurrent.ShutdownSignalBarrierchanges in Agrona 2.3.0.
Please read the corresponding release notes on how to upgrade. -
[Breaking]
ClusteredServiceContainer.Context.shutdownSignalBarrier,ConsensusModule.Context.shutdownSignalBarrier
andClusterBackup.Context.shutdownSignalBarriermethods were removed and replaced with an explicitShutdownSignalBarrier.For example this is how
ConsensusModule#mainchanged:-
Before:
public static void main(final String[] args) { loadPropertiesFiles(args); try (ConsensusModule consensusModule = launch()) { consensusModule.context().shutdownSignalBarrier().await(); System.out.println("Shutdown ConsensusModule..."); } }
-
After:
public static void main(final String[] args) { loadPropertiesFiles(args); try (ShutdownSignalBarrier barrier = new ShutdownSignalBarrier(); ConsensusModule ignored = launch(new Context().terminationHook(barrier::signalAll))) { barrier.await(); System.out.println("Shutdown ConsensusModule..."); } }
-
-
[Breaking] Aeron jars no longer provide OSGI metadata as
bndplugin was removed, because it breaks
compatibility with Gradle 9.1 and causes self-dependency viabaselinetask.
Changelog
- [Agent] Make agent classes accessible outside of
io.aeron.agentpackage. - [Agent] Fix
CMD_IN_MAX_RECORDED_POSITIONlogging. - [Agent] Add
CLUSTER_SESSION_STATE_CHANGElog event. - [Agent] Add
APPEND_SESSION_OPENlog event. - [Agent] Remove
ADD_PASSIVE_MEMBERlog event. - [Agent/C] Remove extraneous
]suffix from log messagesCMD_IN_REMOVE_PUBLICATION,CMD_IN_REMOVE_SUBSCRIPTIONandCMD_IN_REMOVE_COUNTER. - [Agent/C] Fix
UNTETHERED_SUBSCRIPTION_STATE_CHANGElogging, i.e. log previous state and add missing logging toaeron_publication_image. - [Archive] Allow for the archive to update the channel for a specific recording.
- [Archive] Return an error code when replaying and stopping an empty recording. (#1854)
- [Archive] Capture abort reason in
RecordingSession. - [Archive] Add additional "length" that will replay the data available, but not follow a live recording. Add more
appropriately named constants and update javadoc. - [Archive] Ensure
AeronArchive.State.CLOSEDis used whenAeronArchiveinstance is closed. - [Archive/C] Close uri string builders upon error when concluding
aeron_archive_context. - [Archive] Adjust aliases on Archive streams for easier debugging.
- [Archive/Driver/Cluster] Lower
cycle thresholdfor core components to1msby default. - [Archive] Add
ALLOW_ALLandDENY_ALLauthorisation supplier options for the Archive. - [Archive/C] Add aeron_archive_wrapper's own sources to the
target_include_directories. - [Archive] Do not log a warning when control response publication is disconnected or a control request image is going
away, i.e. treat those events as normal client termination. - [Archive] Copy
response-endpoint,ttlandstream-idURI parameters from the original channel definition when creating recordings and replays. - [Client] Add Sequencer counter types.
- [Client] Read
mtufrom the log buffer metadata only once. - [Client] Provide additional context when log buffer cannot be mapped.
- [Client] Add
InternalApiannotation. - [Client/C++ Wrapper] Add missing assignment operator to match the copy constructor.
- [Client/C] Send
CLIENT_CLOSEcommand to media driver when aeron is closing. (#1837) - [Client/C] Fix client build to properly resolve
-DHAVE_BSDSTDLIB_H -DHAVE_ARC4RANDOM. - [Cluster] Update the default AuthorisationService to allow requests necessary for Cluster Standby. (#1870)
- [Cluster] Handle exception during snapshot, i.e. continue running if exception is non-terminal.
- [Cluster] Remove more references to membership changes/passive members/dynamic join.
- [Cluster] Re-create ingress publication upon redirect from a follower while connecting to the Cluster.
- [Cluster] Ensures proper handling when ingress publication is closed but not null. (#1861)
- [Cluster] Add more context for transitioning from
FOLLOWER_LOG_REPLAYstate. - [Cluster] Add more context to
unexpected commit positionevents. - [Cluster] Add context to
unexpected commit position from new leaderevent. - [Cluster] Service snapshot time now includes time to serialize sessions and connect to the Archive.
- [Cluster] Only log
APPEND_SESSION_CLOSEupon successful append to the log + reduce slow cycle frequency caused by
failed append attempts. - [Cluster] Within the
ClusterToolOperatorbind the adapter before the publication and await for the subscription to be
bound to reduce the chance of the returning publication not being connected and rejecting the return message. - [Cluster] Prevent standby replicated snapshots getting stuck if the address on the standby entry is invalid.
- [Cluster] Add
ALLOW_ALLandDENY_ALLauthorisation supplier options for the Cluster. - [Driver] Fix incorrect update frequency in PublisherPos javadoc. (#1867)
- [Driver] Untethered subscriptions are closed after
LINGERifrejoin=falseis specified. - [Driver] Correctly handle connection status updates for untethered IPC subscribers.
- [Driver/C] Ensure
rcv-naks-sentcounter is cleaned up if publication image creation fails. - [Driver/C] Prevent sending empty NAK message upon initial connection to the publisher.
- [Driver] Set absolute minimum value for NAK unicast delay at
1usand use it as a default value. - [Driver] Ignore NAKs with zero length and treat NAKs with negative length as invalid packets.
- [Driver/C] Fix
untethered_linger_timeout_nsparsing and validation. Remove1usmin value that was applied when parsing untethered timeouts. - [Driver] Validate
untetheredLingerTimeoutNsnot belowtimerIntervalNs. - [Driver/C] Update documented NAK defaults.
- [Driver/Java] Do not overwrite
imageConnectionson every received packet.
...
1.45.2
- [Java] Backport Image changes to protect against stalled subscribers.
- [C/C++ Wrapper] Include
<chrono>to fix compilation error on Windows. - [Java] Backport releasing to Maven Central Portal.
- [CI] Build changes to support new release process.