From 2db382fef2ad19f26bc37dcae04abdfedd186daa Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 16:50:58 +0100 Subject: [PATCH 1/9] aeron 1.51.0 --- .scala-steward.conf | 2 -- project/Dependencies.scala | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.scala-steward.conf b/.scala-steward.conf index 68a6818fbc..26a7bc4798 100644 --- a/.scala-steward.conf +++ b/.scala-steward.conf @@ -1,6 +1,4 @@ updates.pin = [ - # https://github.com/apache/pekko/issues/2329 - { groupId = "io.aeron", version = "1.48." }, # Scala 3.3 is the latest LTS version { groupId = "org.scala-lang", artifactId = "scala3-library", version = "3.3." } # sbt-assembly 2.3 causes build issues (https://github.com/apache/pekko/pull/1744) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 1ae09c7458..974947f8bd 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -30,11 +30,11 @@ object Dependencies { val junit6Version = "6.0.3" val slf4jVersion = "2.0.17" // also update agrona version when updating aeron: - val aeronVersion = "1.48.10" + val aeronVersion = "1.51.0" // Use the major+minor agrona versions matching aeron at // https://github.com/aeron-io/aeron/blob/1.x.y/gradle/libs.versions.toml // (remember to also update the scala-steward pin) - val agronaVersion = "2.2.4" + val agronaVersion = "2.4.1" val nettyVersion = "4.2.13.Final" val logbackVersion = "1.5.32" From a4a1ae38c31db35c1b697a67882100c1630bec9e Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 16:53:47 +0100 Subject: [PATCH 2/9] temp enable aeron tests --- .github/workflows/nightly-builds-aeron.yml | 1 + .scala-steward.conf | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly-builds-aeron.yml b/.github/workflows/nightly-builds-aeron.yml index 71977530e5..fa55a971fe 100644 --- a/.github/workflows/nightly-builds-aeron.yml +++ b/.github/workflows/nightly-builds-aeron.yml @@ -12,6 +12,7 @@ on: schedule: - cron: "0 0 * * *" workflow_dispatch: + pull_request: permissions: {} diff --git a/.scala-steward.conf b/.scala-steward.conf index 26a7bc4798..636eb45de4 100644 --- a/.scala-steward.conf +++ b/.scala-steward.conf @@ -3,9 +3,8 @@ updates.pin = [ { groupId = "org.scala-lang", artifactId = "scala3-library", version = "3.3." } # sbt-assembly 2.3 causes build issues (https://github.com/apache/pekko/pull/1744) { groupId = "com.eed3si9n", artifactId = "sbt-assembly", version = "2.2." } - # agrona major+minor version should match the one brought - # in by aeron - { groupId = "org.agrona", artifactId = "agrona", version = "2.2." } + # agrona major+minor version should match the one brought in by aeron + { groupId = "org.agrona", artifactId = "agrona", version = "2.4." } ] updates.ignore = [ From 4985c0fc6c8d7f834c7af1f9298e72c7b5dd76ff Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 18:16:25 +0100 Subject: [PATCH 3/9] try to remove unused code imports Update AeronStat.java Update AeronStat.java --- .../pekko/remote/artery/aeron/AeronStat.java | 87 ------------------- 1 file changed, 87 deletions(-) diff --git a/remote/src/test/java/org/apache/pekko/remote/artery/aeron/AeronStat.java b/remote/src/test/java/org/apache/pekko/remote/artery/aeron/AeronStat.java index cf12053888..5251051508 100644 --- a/remote/src/test/java/org/apache/pekko/remote/artery/aeron/AeronStat.java +++ b/remote/src/test/java/org/apache/pekko/remote/artery/aeron/AeronStat.java @@ -31,13 +31,10 @@ import java.io.File; import java.io.PrintStream; import java.nio.MappedByteBuffer; -import java.util.Date; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; import java.util.regex.Pattern; import org.agrona.DirectBuffer; import org.agrona.IoUtil; -import org.agrona.concurrent.SigInt; import org.agrona.concurrent.status.CountersReader; /** @@ -144,73 +141,6 @@ public static CountersReader mapCounters(final File cncFile) { createCountersValuesBuffer(cncByteBuffer, cncMetaData)); } - public static void main(final String[] args) throws Exception { - Pattern typeFilter = null; - Pattern identityFilter = null; - Pattern sessionFilter = null; - Pattern streamFilter = null; - Pattern channelFilter = null; - - if (0 != args.length) { - checkForHelp(args); - - for (final String arg : args) { - final int equalsIndex = arg.indexOf('='); - if (-1 == equalsIndex) { - System.out.println("Arguments must be in name=pattern format: Invalid '" + arg + "'"); - return; - } - - final String argName = arg.substring(0, equalsIndex); - final String argValue = arg.substring(equalsIndex + 1); - - switch (argName) { - case COUNTER_TYPE_ID: - typeFilter = Pattern.compile(argValue); - break; - - case COUNTER_IDENTITY: - identityFilter = Pattern.compile(argValue); - break; - - case COUNTER_SESSION_ID: - sessionFilter = Pattern.compile(argValue); - break; - - case COUNTER_STREAM_ID: - streamFilter = Pattern.compile(argValue); - break; - - case COUNTER_CHANNEL: - channelFilter = Pattern.compile(argValue); - break; - - default: - System.out.println("Unrecognised argument: '" + arg + "'"); - return; - } - } - } - - final AeronStat aeronStat = - new AeronStat( - mapCounters(), typeFilter, identityFilter, sessionFilter, streamFilter, channelFilter); - final AtomicBoolean running = new AtomicBoolean(true); - SigInt.register(() -> running.set(false)); - - while (running.get()) { - System.out.print("\033[H\033[2J"); - - System.out.format("%1$tH:%1$tM:%1$tS - Aeron Stat%n", new Date()); - System.out.println("========================="); - - aeronStat.print(System.out); - System.out.println("--"); - - Thread.sleep(ONE_SECOND); - } - } - public void print(final PrintStream out) { counters.forEach( (counterId, typeId, keyBuffer, label) -> { @@ -221,23 +151,6 @@ public void print(final PrintStream out) { }); } - private static void checkForHelp(final String[] args) { - for (final String arg : args) { - if ("-?".equals(arg) || "-h".equals(arg) || "-help".equals(arg)) { - System.out.format( - "Usage: [-Daeron.dir=] AeronStat%n" - + "\tfilter by optional regex patterns:%n" - + "\t[type=]%n" - + "\t[identity=]%n" - + "\t[sessionId=]%n" - + "\t[streamId=]%n" - + "\t[channel=]%n"); - - System.exit(0); - } - } - } - private boolean filter(final int typeId, final DirectBuffer keyBuffer) { if (!match(typeFilter, () -> Integer.toString(typeId))) { return false; From b62f3cf4fa4e616fe880194f8b2dd5a205d4b7f8 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 20:58:53 +0100 Subject: [PATCH 4/9] Update DaemonicSpec.scala --- .../src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala b/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala index 80a255f706..08a088a01c 100644 --- a/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala +++ b/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala @@ -55,7 +55,7 @@ class DaemonicSpec extends PekkoSpec { val newNonDaemons: Set[Thread] = Thread.getAllStackTraces.keySet().asScala.filter(t => !origThreads(t) && !t.isDaemon).to(Set) newNonDaemons should ===(Set.empty[Thread]) - }, 4.seconds) + }, 20.seconds) } finally { shutdown(daemonicSystem) From 3b8fe0ac04eb386c6cc3d7c582b439a0a2447293 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 21:30:01 +0100 Subject: [PATCH 5/9] aeron 1.50.4 --- .scala-steward.conf | 2 ++ project/Dependencies.scala | 2 +- .../src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.scala-steward.conf b/.scala-steward.conf index 636eb45de4..cf1ea2423e 100644 --- a/.scala-steward.conf +++ b/.scala-steward.conf @@ -1,4 +1,6 @@ updates.pin = [ + # https://github.com/apache/pekko/issues/2329 + { groupId = "io.aeron", version = "1.50." }, # Scala 3.3 is the latest LTS version { groupId = "org.scala-lang", artifactId = "scala3-library", version = "3.3." } # sbt-assembly 2.3 causes build issues (https://github.com/apache/pekko/pull/1744) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 974947f8bd..83ca91976b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -30,7 +30,7 @@ object Dependencies { val junit6Version = "6.0.3" val slf4jVersion = "2.0.17" // also update agrona version when updating aeron: - val aeronVersion = "1.51.0" + val aeronVersion = "1.50.4" // Use the major+minor agrona versions matching aeron at // https://github.com/aeron-io/aeron/blob/1.x.y/gradle/libs.versions.toml // (remember to also update the scala-steward pin) diff --git a/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala b/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala index 08a088a01c..80a255f706 100644 --- a/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala +++ b/remote/src/test/scala/org/apache/pekko/remote/DaemonicSpec.scala @@ -55,7 +55,7 @@ class DaemonicSpec extends PekkoSpec { val newNonDaemons: Set[Thread] = Thread.getAllStackTraces.keySet().asScala.filter(t => !origThreads(t) && !t.isDaemon).to(Set) newNonDaemons should ===(Set.empty[Thread]) - }, 20.seconds) + }, 4.seconds) } finally { shutdown(daemonicSystem) From c9657559b1a12aa176317524267b8c270bff0b2a Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 22:26:35 +0100 Subject: [PATCH 6/9] bring back RemoteTransportException behaviour --- .../pekko/remote/artery/aeron/AeronSource.scala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/remote/src/main/scala/org/apache/pekko/remote/artery/aeron/AeronSource.scala b/remote/src/main/scala/org/apache/pekko/remote/artery/aeron/AeronSource.scala index b3bb950d01..17e1e5ad59 100644 --- a/remote/src/main/scala/org/apache/pekko/remote/artery/aeron/AeronSource.scala +++ b/remote/src/main/scala/org/apache/pekko/remote/artery/aeron/AeronSource.scala @@ -19,12 +19,13 @@ import scala.concurrent.{ Future, Promise } import scala.util.control.NonFatal import io.aeron.{ Aeron, FragmentAssembler, Subscription } -import io.aeron.exceptions.DriverTimeoutException +import io.aeron.exceptions.{ AeronException, DriverTimeoutException } import io.aeron.logbuffer.FragmentHandler import io.aeron.logbuffer.Header import org.agrona.DirectBuffer import org.apache.pekko +import pekko.remote.RemoteTransportException import pekko.stream.Attributes import pekko.stream.Outlet import pekko.stream.SourceShape @@ -106,7 +107,14 @@ private[remote] class AeronSource( override def createLogicAndMaterializedValue(inheritedAttributes: Attributes) = { val logic = new GraphStageLogic(shape) with OutHandler with AeronLifecycle with StageLogging { - private val subscription = aeron.addSubscription(channel, streamId) + private val subscription = try { + aeron.addSubscription(channel, streamId) + } catch { + case e: AeronException => + throw new RemoteTransportException( + s"Failed to create Aeron subscription for channel [$channel] and streamId [$streamId]", + e) + } private var backoffCount = spinning private var delegateTaskStartTime = 0L private var countBeforeDelegate = 0L From 32206722458b80a6f69091f14887352c4e34b5d0 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 23:00:08 +0100 Subject: [PATCH 7/9] Update ArteryFailedToBindSpec.scala --- .../org/apache/pekko/remote/artery/ArteryFailedToBindSpec.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote-tests/src/test/scala/org/apache/pekko/remote/artery/ArteryFailedToBindSpec.scala b/remote-tests/src/test/scala/org/apache/pekko/remote/artery/ArteryFailedToBindSpec.scala index 103e2cb618..b840aed53f 100644 --- a/remote-tests/src/test/scala/org/apache/pekko/remote/artery/ArteryFailedToBindSpec.scala +++ b/remote-tests/src/test/scala/org/apache/pekko/remote/artery/ArteryFailedToBindSpec.scala @@ -58,7 +58,7 @@ class ArteryFailedToBindSpec extends AnyWordSpec with Matchers { } RARP(as).provider.transport.asInstanceOf[ArteryTransport].settings.Transport match { case ArterySettings.AeronUpd => - ex.getMessage should ===("Inbound Aeron channel is in errored state. See Aeron logs for details.") + ex.getMessage should startWith("Failed to create Aeron subscription") case ArterySettings.Tcp | ArterySettings.TlsTcp => ex.getMessage should startWith("Failed to bind TCP") } From b8da78bd7735de8993ef8c4adfc66b0eab357a18 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 5 May 2026 23:06:13 +0100 Subject: [PATCH 8/9] Update remoting-artery.md --- docs/src/main/paradox/remoting-artery.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/main/paradox/remoting-artery.md b/docs/src/main/paradox/remoting-artery.md index 39b22b07eb..8e5b486171 100644 --- a/docs/src/main/paradox/remoting-artery.md +++ b/docs/src/main/paradox/remoting-artery.md @@ -745,10 +745,10 @@ Given that Aeron jar files are in the classpath the standalone media driver can java io.aeron.driver.MediaDriver ``` -The needed classpath: +The classpath would be approximately (but you will need to fix up the version numbers): ``` -Agrona-0.5.4.jar:aeron-driver-1.0.1.jar:aeron-client-1.0.1.jar +agrona-2.4.1.jar:aeron-driver-1.50.4.jar:aeron-client-1.50.4.jar ``` You find those jar files on [Maven Central](https://search.maven.org/), or you can create a From 373cd2d5a62119821d2037bf2807f132ac3d6e66 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 6 May 2026 00:04:57 +0100 Subject: [PATCH 9/9] Remove pull_request trigger from nightly builds Removed pull_request trigger from nightly builds workflow. --- .github/workflows/nightly-builds-aeron.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/nightly-builds-aeron.yml b/.github/workflows/nightly-builds-aeron.yml index fa55a971fe..71977530e5 100644 --- a/.github/workflows/nightly-builds-aeron.yml +++ b/.github/workflows/nightly-builds-aeron.yml @@ -12,7 +12,6 @@ on: schedule: - cron: "0 0 * * *" workflow_dispatch: - pull_request: permissions: {}