Releases: aeron-io/aeron
Releases · aeron-io/aeron
1.43.0
- [Driver] Support specifying endpoints and tags in the same URI
- [C Driver] Add reference id to counters.
- [Driver] Set reference id of sub-pos to registration id of the image/publication.
- [C Client] Fix aeron_print_counters.
- [Java Driver] Touch ups for RetransmitHandler.
- [C Driver] Put enum events in order.
- [C Driver] Remove reliance of max event num in enum for driver agent.
- [C Driver] Fix signed comparisons.
- [C Driver] Declare void param.
- [C Driver] Keep loop types consistent.
- [Java Driver] Add a clamp on retransmit length.
- [Java Client] Fix Aeron.getSubscription(long) JavaDoc.
- [Java Driver] Encapsulate retransmit multiples constants.
- [Samples] Add sample code to support stress testing of MDC and Unicast connections.
- [Cluster] Mark services as active only after they have successfully started.
- [Driver] Improve error messages reported by clients if the Media Driver has been shutdown.
- [C Client] Populate the client image subscriber_position_id.
- [Cluster] Improve error message when cluster fails to connect.
- Add detailed version information to Aeron error counters for all components. Include release version and Git SHA.
- [C Driver] Fix capture of spy subscription channels so that image availability callbacks include the correct subscription URI.
- [C] Use -fno-omit-frame-pointer on Linux native builds so provide easy and accurate profiling with tools like perf.
- Add
+guilty
to version information if using a build that has changes that have not been committed to git. - [C Client] Correctly handle the case where an image is used across multiple subscriptions. Including ensuring the unavailability callbacks delivered correctly.
- [Archive] Exclude invalid recordings from ArchiveTool describe and add a
describe-all
command which shows valid and invalid recordings. - [C Driver] Introduce a parameters structure that can be used to carry transport configuration information when initialising a udp_channel_transport. Also pass MTU information through the bindings to allow for improved validation of within the DPDK bindings.
- [Driver] Only include timestamps on packets that carry the DATA_BEGIN_FLAG to prevent accidental corruption of packets when the timestamp is being carried within the payload.
- [Cluster] Remove the need for MDS subscription on cluster ingress by having a separate IPC ingress subscription when required. Plus await sockets closing on the log subscription in parallel with the other activities when preparing for an election.
- [Cluster] A leader should assert its leadership when a follower requests a vote and the leader has a more up-to-date log rather than re-initialising an election which could result in log truncation.
- [C Driver] Ensure loop iteration index is used when setting timestamps for publication.
- [Cluster] Log event for unknown session close in service container rather than throw and exception.
- [Cluster] Throw exception if a member id is not found in the cluster backup's configuration.
- [Cluster] Avoid list creation when throwing an exception.
- [Archive] Add ArchiveTool mark-valid, mark-invalid commands. These provide a way to patch the catalog in an emergency.
- [Cluster] Ensure that the ClusterMarkFile link is created using the parent directory from the MarkFile object.
- [Driver] Add stricter validation on control addresses, including: Require control address with
control-mode=dynamic
. Allow control addresses on non-MDC unicast publications. Add clearer validation on control-mode when using tags. - [Driver] Introduce an enum to track the control mode specified on Channel URIs.
- [Driver] Update pub-pos when updating pub-lmt.
- [Java Driver] Check if CnC file has error log buffer allocated.
- [Driver] Print usable space when throwing StorageSpaceException or returning an error.
- [C Samples] Make AeronStat respect update interval option. AeronStat was effectively ignoring
-u
and incorrectly using-t
instead. - [Java] Fix NullPointerException in LogBuffers when construction fails with an exception.
- [Driver] Add counter to represent the number of bytes mapped by the Driver.
- [Driver] Pass in setup triggering SMs into flow control so that tags can be matched for controlling setup sender limiting.
- [C] Fix client image reference counting by use the appropriate literals to ensure that 64-bit parameters are used.
- [Cluster] Call unexpectedTermination on incompatible app versions in the ConsensusModuleAgent.
- [C Driver] Implement low storage warnings for the C driver.
- [Java Driver] Backoff from sending when a short send it detected by polling for status messages as a means to provide a little breathing room for underlying stack.
- [Cluster] Detect when log subscription in an election has an error, such as bind exception, throw an exception giving context and restart election.
- [Cluster] Close log subscription after prepareForNewLeadership.
- [Cluster] Introduce SnapshotDurationTracker to track the time taken for snapshots in the Cluster.
- [Java] Rename aeron-version module to aeron-annotations.
- [C Driver] add max_retransmission_length.
- [Java] Remove suffix from version.
- [Cluster] Stop log recording even if an image has not been picked up and no need to try stop the recording by identity if stopped by log subscription id.
- [Cluster] Increase visibility from private to package-protected for a number of ClusterTool utility methods.
- [Cluster] Add STANDBY as a component type to cluster mark file codec.
- [Cluster] Add cluster services directory to the cluster mark file and allow it to be set via the ConsensusModule.Context. This means that ClusterTool can resolve the location of the service container mark files even if they are not stored in the same directory.
- [C++] Use static constexpr for declaring constants.
- [C/C++] Use functions to return version information to enable runtime version checks against the media driver.
- [C++ Wrapper Client] Allow to access the underlying client of the C++ wrapper.
- [C Driver] Fix error reporting for aeron_port_manager.
- [C Driver] Implement timestamp capturing for the recvmsg path.
- [C Driver] Switch sender poller to poll for a single SM, i.e. do the
recvmsg
syscall. - [C Driver] Add additional validation for frame_length on status messages.
- [C Driver] Fix error format strings when configuring sockets for the udp transport.
- [C/C++] Remove date/time from the version files for a reproducible build.
- [C] Fix line ordering bug and add missing return statements and error appending.
- [Driver] Allow publication image flow control under runs if they are heartbeats so a stream can be kept connected and to get a more accurate EOS when using MDS.
- [C Driver] Use correct type for array length calculation, fix #1539.
- [Driver] Track EOS position per image connection for MDS.
- [C++ Wrapper] Fix maxMessageLength.
- [C++ Wrapper] Fix FragmentAssembler.
- Upgrade to AsciiDoctorJ 2.5.10
- Upgrade to JGit 5.13.2.202306221912-r
- Upgrade to Versions Plugin 0.50.0
- Upgrade to ByteBuddy 1.14.10
- Upgrade to ASM 9.6.
- Upgrade to Agrona 1.20.0
- Upgrade to JUnit 5.10.1
- Upgrade to SBE 1.30.0
1.41.5
- [Java] A leader should assert its leadership when a follower requests a vote and the leader has a more up-to-date log rather than re-initialising an election which could result in log truncation.
- [Java] Change role to leader after winning election so leadership can be asserted during replay or replication.
- [Java] Log event for unknown session close in service container rather than throw and exception.
1.42.1
- [Java] Ensure that the
LoggingErrorHandler
instance is closed when wrapping a user-definedErrorHandler
. - [Java] Invoke background work when idle and service is active so external connections from a cluster can be maintained.
- [Doc] JavaDoc clarifications on MediaDriver dirDeleteOnStart behavior.
- Upgrade to Agrona 1.19.2.
- Upgrade to ByteBuddy 1.14.7.
1.42.0
Register here for Aeron Community Meetups - 12 October London / 18 October NY / 16 November Chicago.
- Add port manager to C and Java drivers to allow for a limited range of ports that can be used when subscription endpoint addresses and publication control addresses specify a port of
0
. This can make network access configuration simpler (Driver). - Wait for end of stream event on the log instead of the counter becoming unavailable before entering into a new Election (Cluster).
- Close log publications before trying to stop recording to speed up graceful leader step down (Cluster).
- Ignore resting subscription positions when calculating join position or draining driver entities when tethering is being used (C Driver).
- Extensions points to support Standby Snapshots (Cluster).
- Ensure that the
clusterDirectoryName
field is synced with theclusterDir
configuration parameter during conclude inConsensusModule
andClusterBacker
(Cluster). - Cluster tutorial updates (Documentation).
- Extract invocation of background work in the service container.
- Do not fail if Aeron directory exists, but the CnC file does not (C Driver).
- Use
aeron_errcode
to get the latest error code when reporting problems creating the Aeron directory (C Driver). - Don't let a bounded replay go beyond counter value to stop position so commit position can be used for replay (Archive).
- Add addition example Authentication and Authorisation services (Archive/Cluster).
- Add additional documentation to specify details when Authorisation is used (Archive/Cluster).
- Clarify logic about extending a replay while being bounded (Archive).
- Changes to host name resolution on start up (Driver).
- Perform host name resolution once and track its execution time via the duty cycle tracker and the event log.
- Use
<unresolved>
as a host name if it cannot be resolved instead of null. - Fix GCC 9 warning
- Await initial counters being updated by the conductor thread before reading the values.
- Trigger graceful leader close election based on recording stop signal (Archive).
- Add end of stream position to Subscriptions (Client).
- Allow for relocatable mark files for the
ConsensusModule
,ClusteredServiceContainer
, andClusterBackup
(Cluster). - Move close operations on MDS transports on the conductor not the receiver thread (C Driver).
- Allow preparing for new leadership to be less serial to reduce election time (Cluster).
- Async removal of destinations as log adaptor closes when preparing for election (Cluster).
- Fix CMD_OUT_ERROR log format (C Driver).
- Fix
aeron_err_clear()
(C). - C driver handle untethered subscriptions correctly, ensure that tethering behaviour matches Java driver (C Driver).
- Fix name in toString (Java Client).
- Improve error message (C++ Archive Client).
- Clean up Apple M1 compilation. Move loss reporter function into compilation unit. Add pragmas to account for unused but set variables (C).
- Add logging to track information when a
ReplicationSession
ends (Archive). - Add deduplication step for aeron-agent jar.
- Add deduplication step for aeron-all jar.
- Add an annotation processor to generate a version class for a number of the Aeron packages.
- Include the git sha in the version C binaries.
- Extract
untetheredWindowLimit
method. - Upgrade to SBE 1.29.0.
- Upgrade to JUnit 5.10.0.
- Upgrade to Agrona 1.19.1.
1.41.4
- Store
Aeron.NULL_VALUE
for lastActivityTimestamp in the snapshot for sessions as the value should be transient (Cluster). - On snapshot of PendingServiceMessageTracker, check to see if the buffer is empty and the nextServiceSessionId is lower than what it should be. Correct this and log an error that follower may not have executed the service IPC logic deterministically (Cluster).
- Include the recording position in the debug log when replicate session state changes (Archive).
- Don't cool down an Image that is EOS (Driver)
- Reset eos_flagged when adding a receiver (C Driver)
- Filter images by session id when adding new network subscriptions (C Driver)
- Allow the session-id of the publication used during replication to be specified to avoid session-id clashes on replication retries (Archive).
- Allow the authorisation credentials to be specified on a replication request to support simple authentication between the destination and source archives (Archive).
- Use custom session-ids when replicating snapshots and logs (Cluster).
- SBE 1.28.3
- Agrona 1.18.2
- ByteBuddy 1.14.5
- Version 0.47.0.
1.41.3
- [Java] Add debug method for a replication completing withing Cluster.
- [Java] Let Archive take care of handling Aeron exceptions when client is embedded.
- [C] Prevent double free of the
aeron_udp_channel_t
when creating asend_channel_endpoint_t
. - [C] Upgrade to HDR Histogram 0.11.8
- [Java] Upgrade to JUnit 5.9.3 (platform console 1.9.3)
- [Java/C] Name resolution execution time tracking
- [Java] Simplify Client Close
- [Java] Perform Runtime.exit(int) on another thread in default error handler to avoid deadlocks if Aeron instances are used on JVM shutdown hooks.
- [C] Fix potential memory leak. Use correct action with publication notification.
- [Java] Ensure segment file write of final byte for extension is successful
1.39.1
1.41.2
- [Java] Fixed ClusterBackup backwards compatibility issue caused by the missing
memberId
field. - [Java] Set isLeader flag on the list of cluster members passed to
ClusterBackupEventsListener
. - [C] Prevent negative shifts when receiving some messages from ATS.
- Upgrade to ByteBuddy 1.14.4.
- Upgrade to Gradle 8.1.
- Upgrade to Shadow 8.1.1.
1.41.1
- Upgrade to Agrona 1.18.1.
- Upgrade to SBE 1.28.2.
1.41.0
- Allow
NameResolver
to be configured for theConsensusModule
in order to support custom name resolution when configuring the ingress channel. - Delay election state transitions if there is an active leader to avoid unnecessary reset and new election.
- Make
AeronCluster.asyncConnect
work completely asynchronously. Don't report exceptions to the error handler that are used for async resources. - Add a system property and API to allow changing a directory where an Archive mark file (
archive-mark.dat
) is stored. - Check the state of the interface when trying to resolve the multicast interface. Only use interfaces that are up. Issue #1387
- CnC file length validation. Issue #1410
- Fix issue of not capturing return code when recording signal arrives after an error to the archive client.
- Support migrating segments to the beginning or end of an existing archive recording.
- [C] Fix issue of using transport after it had been removed.
- [Java] Fix concurrent close of receive destination counters on multi-destination subscriptions.
- [C] Fix
remove_if
methods on pointer value maps which previously could miss an item. - Add debug logging for clustered service acking.
- Add a specific error for archive replication failing to create a remote connection.
- Fix leak with Archive replay session if the async publication has a session clash.
- Shorten duration of cluster election after a leader has closed gracefully.
- [C] Fix image rejoin by swapping correcting cooldown map insertion and removal. PR #1338
- Candidate ballot for 5+ node cluster cannot be cut short on quorum otherwise most up to date member may not be elected.
- [C] Allow for attempted recreation of an Image if initial attempt fails. PR #1435
- Perform most replay validations before sending OK to the client so errors are synchronous when starting a replay.
- Delete all recording segment files when a recording is truncated to its start position.
- Close
ArchiveMarkFile
last when shutting down Archive to capture all errors. - [C++] Apply
std::forward
to fragment handler to avoid unnecessary copy. PR #1405 - Fix handling of padding greater than max message length in Archive replay.
- Add debug logging for Archive recording signals.
- Close log subscription first when clustered service is cleanly closed to drop follower out of flow control as soon as possible.
- Drop cluster follower as soon as possible out of flow control to allow cluster to progress when follower is cleanly closed.
- [C] Report timeout accurately when driver keepalive beyond timeout. PR #1429
- Add ability to run Archive with only IPC control channels for clients.
- Add
ClusterTool.isLeader
method. - Add
Image
toSubscription
before calling available handler rather than after. - Set URI in receiver counters to match subscription channel.
- Add cluster member node state file and migrate out state that needs to be persistent, such as
candidateTermId
and member list, so the mark file can be in /dev/shm. - [C] Fix issue with removing naming resolver neighbor that deleted adjacent memory.
- [C] Improve socket error handling on Windows.
- [Java] Add
toString()
to many Aeron classes to help debugging. - [C] Improve parsing of unsigned 32-bit integers.
- [C] Set max of resource free queue length and resource free limit to
INT32_MAX
. This stops them being incorrectly set to 0 by aeron_config_parse_uint32 when comparing against int32 0. PR #1421 - Deprecate cluster dynamic join feature. This is to be replaced with a more robust and user friendly premium offering.
- [C] Fix counter leak when subscription fails.
- [C] Fix spy channel memory leak when destination is removed for multi-destination subscription.
- [C] Fix channel memory leak on error when creating publications or subscriptions.
- Fix NPE on timeout exception for cluster client in some connect states.
- [Java] Improve efficiency of URI parsing.
- [C] Fix error messages with incorrect varargs.
- Warnings clean up in codebase to have less noisy CodeQL analysis.
- Support having mark files for
Archive
,ConsensusModule
, andClusteredServiceContainer
to be in alternative directory such a /dev/shm so timeouts can be avoided when recording writes queue up on a network filesystem. - Add timestamp params to stripped channel for pass through to Archive operations.
- Queue resource freeing operations in driver to avoid timeouts when unmapping operations are slow.
- [C++] Work around compiler concurrency bug for
AtomicArrayUpdater
that can impact client Subscriptions causing image list to become corrupted. - Improve javadoc for recording signal usage.
- Be strict on handling cluster leader liveness to the current leadership term.
- Only try unblocking a client command after liveness timeout to avoid "lost" commands. PR #1369
- Make archive counters unique so multiple archives can run on the same media driver.
- Truncate files after
ArchiveTool.compact
is invoked to free disk space. - Fix basic auction cluster tutorial configuration.
- Improve
ClusterConfig
sample to allow for ingress configuration. - Add counters for the number of active recordings or replays in an Archive.
- Add counters for reporting on read and write operations in an Archive.
- Support allowing a
ClusteredService
being started before theConsensusModule
. - Improve false sharing protections for more consistent latency.
- Simplify
ReplayMerge
samples to not require entity tags. - Add batch script for launching low-latency media driver on Windows.
- Support message lengths greater than MTU in ping pong samples.
- Fix options handling in
cping
sample. - Improve handling of timeouts in cluster elections for more robust state transitions when network is unstable. Effects are more pronounced in 5+ member clusters.
- [Java] Add
Aeron.addAsyncSubscripiton
for non-block setup. - Compute source identity of images more precisely based on channel configuration.
- Improved handling of out of disk space errors.
- Support taking a cluster consensus module snapshot when member names are greater than MTU in length.
- Allow a follower to veto a member being elected cluster leader if they believe the leader is not valid. This is important in 5+ node clusters.
- Extend debugging for voting in cluster elections.
- Increment error counter when invalid version exceptions occur.
- Handle backpressure from commands between dedicated threads in driver with controlled polls to avoid live locks.
- [C] Add support for controlled poll operations on SPSC and MPSC ring buffers.
- Increase command queues to allow for more concurrent active changes in publications and images.
- Serve cluster backup queries from followers to take load from the leader.
- [C] Fix build when dot is used as thousands separator. PR #1372
- Upgrade to JUnit 5.9.2.
- Upgrade to BND 6.4.0.
- Upgrade to ByteBuddy 1.14.3.
- Upgrade to Mockito 4.11.0.
- Upgrade to Version 0.46.0.
- Upgrade to Gradle 7.6.
- Upgrade to SBE 1.28.1.
- Upgrade to Agrona 1.18.0.