8000 Release 1.48.0 · aeron-io/aeron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

1.48.0

Compare
Choose a tag to compare
@vyazelenko vyazelenko released this 03 Jun 22:59
· 14 commits to master since this release
d800d60

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.

    AeronCluster now contains a state machine to track connection status. The state machine is updated during poll operations (AeronCluster#pollEgress and AeronCluster#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 than AeronCluster.Context#newLeaderTimeoutNs() then AeronCluster will close itself.

    NB: When AeronCluster.Context#newLeaderTimeoutNs() is not set the AeronCluster will 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#ingressPublication or AeronCluster#egressSubscription are 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/tryClaim on the AeronCluster#ingressPublication a call to AeronCluster#trackIngressPublicationResult must be made.
    • Every time AeronCluster#egressSubscription is polled a call to AeronCluster#pollStateChanges must be made.
  • 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_AFFINITY for 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.rrwm and aeron.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 via untethered-linger-timeout URI parameter.

Changelog

  • [Java] Initialize archiveId early 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-timeout on the receiver side.
  • [Java] Store untethered-linger-timeout in the log buffer metadata.
  • [Java] Fix a bug where untethered-linger-timeout was not added to the resulting URI.
  • [Java] Use untethered-linger-timeout on the receiver side.
  • [Java] Use Publication#revoke and Image#reject to close ControlSession resources.
  • [Java] Use Publication#revoke to 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.INVOKER if 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 when Aeron.Context.driverAgentInvoker() is set.
  • [Java] Add event code type for sequencer.
  • [Java/C] Image#reject. (#1785)
  • [Java] Fsync archive.catalog file to disc when shutting down Archive.
  • [C] Align flow control receiver timeout with Java, i.e. use AERON_FLOW_CONTROL_RECEIVER_TIMEOUT env variable instead of AERON_MIN_MULTICAST_FLOW_CONTROL_RECEIVER_TIMEOUT.
  • [Java] Remove legacy aeron.MinMulticastFlowControl.receiverTimeout config option, i.e. use aeron.flow.control.receiver.timeout directly.
  • [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-executor name for the async thread, i.e. align with the Java impl.
  • [Java] Use async-executor prefix 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 addAliasIfAbsent method 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-pos iff the image was not closed. Otherwise, the JVM might crash with SIGSEGV while accessing closed Position.
  • [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)
  • [CI] Enable JDK 24 GA.
  • [Java] Do not send termination position to services if there aren't any.
  • [Java] Assert that a rejected image will reconnect after a liveness timeout.
  • [C++] Use method references instead of capturing lambda to avoid warnings on Windows.
  • [C] Align counter API with the Java implementation: - Rename *volatile methods to *release. - Rename all *_ordered methods to *_release. - Add missing _plain methods.
  • [Client] Append block without modifying the underlying buffer, i.e. copy the entire block without the first header and the copy the header to complete write similar to io.aeron.logbuffer.TermRebuilder.insert.
  • [Java] Simple test fixes. (#1760)
  • [Java] Fix mock usage on JDK 21+.
  • [C++] More #include <chrono> fixes for Windows.
  • [C++ Wrapper] Include <chrono> to fix compilation error on Windows.
  • [C] Return an actual ref count value after increment/decrement operation completes + rename aeron_image_refcnt_volatile to aeron_image_refcnt_acquire.
  • [Java] Switched to the new Agrona release functions. (#1748)
  • [C] Tidy up image list handling in subscription.
  • [C] Close an image when it is being removed from a subscription.
  • [C] Call aeron_subscription_is_connected to force an image list change number update so that image/log buffers can be freed by the conductor thread.
  • [C] Use DeviceIoControl to create sparse files.
  • [C] Create files with FILE_FLAG_POSIX_SEMANTICS on Windows.
  • [C] Specify DELETE access right when creating files on Windows.
  • [C++ Wrapper] Handle potential exception from std::make_shared.
  • [C] Use FILE_ATTRIBUTE_SPARSE_FILE upon file creation instead of using DeviceIoControl.
  • [C] Use SHFileOperation to delete file on Windows.
  • [C] Use CreateFile to open for r/w.
  • [C] Use CreateFile on Windows and enable FILE_SHARE_DELETE sharing mode to allow file to be deleted even if open mappings exist.
  • [C++ Wrapper] Remove definitions that shadow aeron_logbuffer_descriptor.h definitions.
  • [C++] Configure ARM support in Platform.h.
  • [C++ Wrapper] Use randomized aeron.dir in SystemTestParameterized.
  • [C] Use aeron_format_date function from aeron_strutil.h.
  • [C++ Wrapper] Decrement ref count of an Image after it was created, because it was counted twice: once in the C code when looking the aeron_image_t and the second time by invoking aeron_subscription_image_retain inside the Image constructor.
  • [C++] Await until image_available callback is called.
  • [PowerShell] CMake installation progress report.
  • [PowerShell] Tidy up CMake installation.
  • [C] Enable --sanitise-build on MacOS.
  • [Java] Use null values when resetting descriptor.
  • [Java] Use correlationId as sessionId.
  • [Java] Remove Mockito MockMaker setting from aeron-cluster.
  • [Java] Await recently added subscription in StreamStatTest. (#1733)
  • [C] Make sure aeron_array_fast_unordered_remove is used correctly (fixes #1728).
  • [Java] Change log event for NAK received to use NAK length rather than packet length.
  • [C] Fix var-args bug in error reporting.
  • [Java] Bump Agrona to 2.2.1.
  • [Java] Bump SBE to 1.35.1.
  • [Java] Bump Checkstyle to 10.24.0.
  • [Java] Bump Gradle to 8.14.1.
  • [Java] Bump ByteBuddy to 1.17.5.
  • [Java] Bump JUnit to 5.13.0.
  • [Java] Bump Mockito to 5.18.0.
  • [Java] Bump ASM to 9.8.
  • [C] Bump CMake to 4.0.2.
0