Skip to content

Releases: aeron-io/aeron

1.50.1

Choose a tag to compare

@nickelaway nickelaway released this 05 Feb 17:31
d0fe6b3

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 100ms as the previous value of 1ms was too short and their counts kept ticking up under normal conditions.
  • [Archive] Fix CATALOG_RESIZE debug logging.

1.50.0

Choose a tag to compare

@vyazelenko vyazelenko released this 19 Jan 20:12
b4aa053

New & Noteworthy

  • [Breaking] Remove deprecated standalone C++ API. The C++ Wrapper API should be used instead.

  • The interface channel 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 interface parameter 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}:port format.

Changelog

  • [Archive] Do not set session-id on the replay channel if response channels are used to avoid session-id clash.
  • [Archive] Default AeronArchive.Context.Archive instance is configured with RethrowingErrorHandler for Subscriptions.
  • [Archive] Allow asynchronously connecting to Archive using AgentInvokers.
  • [Archive] Format size and duration parameters when using ChannelUriStringBuilder to 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_archive configurable. (Java PR: #1885)
  • [Archive] Ensure that errors from ReplaySession are 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_CHANGE event. Always quote reason value across all events.
  • [Cluster] Default AeronCluster.Context.Archive instance is configured with RethrowingErrorHandler for Subscriptions.
  • [Cluster] Add support for AgentInvoker/Aeron.conductorAgentInvoker to AeronCluster#asyncConnect.
  • [Cluster] Add log event for Vote message, i.e. a response to RequestVote.
  • [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 from 64KB to 16MB.
  • [Cluster] Unconditionally set reliable=true on 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.asyncConnect fully asynchronous by using Aeron#asyncAddExclusivePublication/asyncAddPublication API 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. Remove hasVotersAtPosition since it is no longer used.
  • [Cluster] Refactor isCandidate checks 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 once timeOfLastAppendPositionNs stops advancing.
  • [Cluster] Only consider active Cluster members when computing the quorum position.
  • [Cluster] Consistently update follower position, i.e. always set logPosition, leadershipTermId and timeOfLastAppendPositionNs together. Add missing update of the follower info upon receiving CanvassPosition.
  • [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#formatDuration to format threshold for the duty cycle tracker counters.
  • [C] Set ownerId for each stream counter created via client command (e.g. ADD_PUBLICATION).
  • [Java] Set ownerId for 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-pos counter now has a suffix ((concurrent) or (exclusive) depending on the type) and log buffer metadata contains a new field type (unit8) at offset 497 which can have values 0 (concurrent publication), 1 (exclusive publication) or 2 (publication image).
  • [C] Add Publication type to the counters and log buffer metadata, i.e. pub-pos counter now has a suffix ((concurrent) or (exclusive) depending on the type) and log buffer metadata contains a new field is_exclusive_publication (unit8) at offset 497.
  • [Driver/C] Increase sender/receiver IO vector capacity and publication max messages per send to 4 from 2.
  • [C] Do not throttle sends to one per call if short sends are encountered.
  • [Driver/C/Java] Add EF_VI, VMA, ATS, DPDK and Selector counter 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__ volatile with __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 endpoint with ephemeral port for MDS subscription. Copy original channel as-is if no resolution is performed.
  • [Java] Do not resolve endpoint with ephemeral port if MDS is used.
  • [Java] Parse channel lazily when tryResolveChannelEndpointPort is called.
  • [Java] Fix Subscription#tryResolveChannelEndpointPort when no addresses exist, i.e. return null if active address is not yet available. Also cache results and avoid doing any work if endpoint is 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 StreamStat and 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_release and aeron_subscription_image_retain no op if image is not found in the
    current image list, i.e. handle a case of on_unavailable_image being 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_t being NULL as well as data field being NULL, i.e. treat both as empty credentials.
  • [C] Fix race condition in aeron_archive_client reentrancy check, i.e. first acquire lock and then do the check. Use
    mutex to protect aeron_archive_close from concurrent execution.
  • [C] Create aeron_mutex_t as 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 the Sender#doWork implementation.
  • [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_resolve to resolve aeron.driver.resolver.interface parameter, i.e.
    skip the aeron_find_interface checks. This aligns the implementation with the DriverNameResolver in Java. Fix
    filtering o...
Read more

1.49.3

Choose a tag to compare

@vyazelenko vyazelenko released this 15 Dec 21:21
0e0a311
  • [Cluster] Ignore messages from unknown schemas (e.g. from Sequencer) in EgressPoller.
  • [Archive] Ensure that errors from ReplaySession are 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_release and aeron_subscription_image_retain no op if image is not found in the
    current image list, i.e. handle a case of on_unavailable_image being 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_t being NULL as well as data field being NULL, i.e. treat both as empty credentials.
  • [C] Fix race condition in aeron_archive_client reentrancy check, i.e. first acquire lock and then do the check. Use
    mutex to protect aeron_archive_close from concurrent execution.
  • [C] Create aeron_mutex_t as 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

Choose a tag to compare

@vyazelenko vyazelenko released this 24 Nov 19:40
57e8683
  • [C] Do not resolve endpoint with ephemeral port for MDS subscription. Copy original channel as-is if no
    resolution is performed.
  • [Java] Fix Subscription#tryResolveChannelEndpointPort when no addresses exist, i.e. return null if active
    address is not yet available. Avoid doing any work if endpoint is not defined (IPC, MDS, response channel) or does not
    contain a port zero.
  • [C] Add aeron_is_frame_valid method.
  • [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 receiverId cannot 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 ComponentLogger and 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-client against libbsd.
  • [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 ByteBuddy 1.17.8.
  • [Java] Upgrade to ASM 9.9.
  • [Java] Upgrade to JUnit 6.0.1.
  • [Java] Upgrade to Checkstyle 12.1.1.
  • [C] Upgrade to CMake 4.1.3.

1.48.10

Choose a tag to compare

@vyazelenko vyazelenko released this 21 Nov 10:17
b221d02
  • [C] Add aeron_is_frame_valid method.
  • [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 receiverId cannot be zero.
  • [C] Link aeron-client against libbsd.

1.48.9

Choose a tag to compare

@vyazelenko vyazelenko released this 11 Nov 15:31
0bb6dea
  • [Driver/Java/C] Add log dissectors for ERR (0x04) frame type.
  • [Java] Delete DeduplicateTask, i.e. use built-in capabilities of the Shadow plugin instead.
  • [Java] Upgrade to Shadow 9.2.2.

1.49.1

Choose a tag to compare

@vyazelenko vyazelenko released this 02 Nov 00:00
10f81c9
  • [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 the Sender#doWork implementation.
  • [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_resolve to resolve aeron.driver.resolver.interface parameter, i.e.
    skip the aeron_find_interface checks. This aligns the implementation with the DriverNameResolver in Java. Fix
    filtering out of self entries, i.e. use full name matching instead of a prefix match.

1.48.7

Choose a tag to compare

@vyazelenko vyazelenko released this 01 Nov 23:49
0e4de5a
  • [Driver/C] Fix UNTETHERED_SUBSCRIPTION_STATE_CHANGE logging, i.e. log previous state and add missing logging to
    aeron_publication_image.
  • [Driver/C] Ensure rcv-naks-sent counter 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 to NOT_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_CONNECTED when 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 from CMD_IN_REMOVE_PUBLICATION, CMD_IN_REMOVE_SUBSCRIPTION and
    CMD_IN_REMOVE_COUNTER log 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 the Sender#doWork implementation.
  • [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_resolve to resolve aeron.driver.resolver.interface parameter, i.e.
    skip the aeron_find_interface checks. This aligns the implementation with the DriverNameResolver in Java. Fix
    filtering out of self entries, i.e. use full name matching instead of a prefix match.

1.49.0

Choose a tag to compare

@vyazelenko vyazelenko released this 03 Oct 11:57
4b09b14

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 control endpoint to be specified.

    For an example see
    ResponseChannelsTest#shouldConnectResponsePublicationUsingImageAndIpc.

  • [Driver] Add support for response-correlation-id=prototype to 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.asyncAddCounter and Aeron.asyncAddStaticCounter methods.
    Created counter is returned by the Aeron.getCounter method. There is also Aeron.asyncRemoveCounter to asynchronously
    remove counter by registrationId.

    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.name system 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 new control-session counter
    (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.name system 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 new cluster-session counter
    (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 AuthorisationService to allow heartbeat and standby-snapshot requests, which are required for Aeron Cluster Standby.

  • [Breaking] org.agrona.concurrent.ShutdownSignalBarrier changes in Agrona 2.3.0.
    Please read the corresponding release notes on how to upgrade.

  • [Breaking] ClusteredServiceContainer.Context.shutdownSignalBarrier, ConsensusModule.Context.shutdownSignalBarrier
    and ClusterBackup.Context.shutdownSignalBarrier methods were removed and replaced with an explicit ShutdownSignalBarrier.

    For example this is how ConsensusModule#main changed:

    • 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 bnd plugin was removed, because it breaks
    compatibility with Gradle 9.1 and causes self-dependency via baseline task.

Changelog

  • [Agent] Make agent classes accessible outside of io.aeron.agent package.
  • [Agent] Fix CMD_IN_MAX_RECORDED_POSITION logging.
  • [Agent] Add CLUSTER_SESSION_STATE_CHANGE log event.
  • [Agent] Add APPEND_SESSION_OPEN log event.
  • [Agent] Remove ADD_PASSIVE_MEMBER log event.
  • [Agent/C] Remove extraneous ] suffix from log messages CMD_IN_REMOVE_PUBLICATION, CMD_IN_REMOVE_SUBSCRIPTION and CMD_IN_REMOVE_COUNTER.
  • [Agent/C] Fix UNTETHERED_SUBSCRIPTION_STATE_CHANGE logging, i.e. log previous state and add missing logging to aeron_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.CLOSED is used when AeronArchive instance 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 threshold for core components to 1ms by default.
  • [Archive] Add ALLOW_ALL and DENY_ALL authorisation 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, ttl and stream-id URI parameters from the original channel definition when creating recordings and replays.
  • [Client] Add Sequencer counter types.
  • [Client] Read mtu from the log buffer metadata only once.
  • [Client] Provide additional context when log buffer cannot be mapped.
  • [Client] Add InternalApi annotation.
  • [Client/C++ Wrapper] Add missing assignment operator to match the copy constructor.
  • [Client/C] Send CLIENT_CLOSE command 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_REPLAY state.
  • [Cluster] Add more context to unexpected commit position events.
  • [Cluster] Add context to unexpected commit position from new leader event.
  • [Cluster] Service snapshot time now includes time to serialize sessions and connect to the Archive.
  • [Cluster] Only log APPEND_SESSION_CLOSE upon successful append to the log + reduce slow cycle frequency caused by
    failed append attempts.
  • [Cluster] Within the ClusterToolOperator bind 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_ALL and DENY_ALL authorisation supplier options for the Cluster.
  • [Driver] Fix incorrect update frequency in PublisherPos javadoc. (#1867)
  • [Driver] Untethered subscriptions are closed after LINGER if rejoin=false is specified.
  • [Driver] Correctly handle connection status updates for untethered IPC subscribers.
  • [Driver/C] Ensure rcv-naks-sent counter 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 1us and 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_ns parsing and validation. Remove 1us min value that was applied when parsing untethered timeouts.
  • [Driver] Validate untetheredLingerTimeoutNs not below timerIntervalNs.
  • [Driver/C] Update documented NAK defaults.
  • [Driver/Java] Do not overwrite imageConnections on every received packet.
    ...
Read more

1.45.2

Choose a tag to compare

@vyazelenko vyazelenko released this 26 Sep 13:46
a7d8ac6
  • [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.