You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pekko.apache.org by he...@apache.org on 2026/04/24 07:37:43 UTC
(pekko) branch main updated: fix: stabilize async DNS dispatchers under low minimum-runnable (#2895)
This is an automated email from the ASF dual-hosted git repository.
He-Pin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git
The following commit(s) were added to refs/heads/main by this push:
new b24d1045e1 fix: stabilize async DNS dispatchers under low minimum-runnable (#2895)
b24d1045e1 is described below
commit b24d1045e11e3cfcfe12218d40b8eff6fbb90de5
Author: He-Pin(kerr) <he...@gmail.com>
AuthorDate: Fri Apr 24 15:37:37 2026 +0800
fix: stabilize async DNS dispatchers under low minimum-runnable (#2895)
* fix: stabilize async dns dispatchers
Motivation:
The async DNS discovery path started timing out when fork-join minimum-runnable was allowed to auto-resolve to a lower value. The failing docs.discovery.DnsDiscoveryDocSpec showed that the isolated SD-DNS lookup path became much more sensitive to dispatcher starvation under that policy.
Modification:
Keep the internal dispatcher on an explicit minimum-runnable floor and route both IO-DNS and SD-DNS async-dns routees through the configured DNS dispatcher instead of leaving the routees on the default dispatcher. Add a regression assertion that the built-in internal dispatcher keeps its explicit compensation floor.
Result:
Async DNS lookups no longer fall back to a starvation-prone routee dispatcher, and the DNS discovery docs regression passes again under minimum-runnable=-1.
References:
https://github.com/apache/pekko/actions/runs/24863583862/job/72794553815
Co-authored-by: Copilot <22...@users.noreply.github.com>
* fix: keep internal dispatcher on auto minimum-runnable
Motivation:
The async DNS routee dispatcher wiring is sufficient to stabilize the DNS discovery path, so keeping an extra hard-coded minimum-runnable floor on the internal dispatcher is broader than necessary.
Modification:
Restore the internal dispatcher setting to minimum-runnable = -1 and adjust the regression spec so it verifies that the built-in internal dispatcher follows its own configured auto policy instead of asserting a fixed value.
Result:
The narrower fix still keeps docs.discovery.DnsDiscoveryDocSpec green under minimum-runnable=-1 while avoiding an unnecessary global compensation override for the internal dispatcher.
---
.../pekko/dispatch/ForkJoinExecutorConfiguratorSpec.scala | 13 +++++++++++++
actor/src/main/resources/reference.conf | 5 +++++
discovery/src/main/resources/reference.conf | 5 ++++-
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/actor-tests/src/test/scala/org/apache/pekko/dispatch/ForkJoinExecutorConfiguratorSpec.scala b/actor-tests/src/test/scala/org/apache/pekko/dispatch/ForkJoinExecutorConfiguratorSpec.scala
index 20e4ea2a77..913b7752f5 100644
--- a/actor-tests/src/test/scala/org/apache/pekko/dispatch/ForkJoinExecutorConfiguratorSpec.scala
+++ b/actor-tests/src/test/scala/org/apache/pekko/dispatch/ForkJoinExecutorConfiguratorSpec.scala
@@ -155,6 +155,19 @@ class ForkJoinExecutorConfiguratorSpec extends PekkoSpec(ForkJoinExecutorConfigu
resolvedMinimumRunnable("fj-explicit-seven-dispatcher") shouldBe 7
}
+ "let the built-in internal dispatcher use its own auto policy" in {
+ val dispatcherConfig =
+ system.dispatchers.config("pekko.actor.internal-dispatcher").getConfig("fork-join-executor")
+ val parallelism = ThreadPoolConfig.scaledPoolSize(
+ dispatcherConfig.getInt("parallelism-min"),
+ dispatcherConfig.getDouble("parallelism-factor"),
+ dispatcherConfig.getInt("parallelism-max"))
+ resolvedMinimumRunnable("pekko.actor.internal-dispatcher") shouldBe resolveMinimumRunnable(
+ configured = dispatcherConfig.getInt("minimum-runnable"),
+ parallelism = parallelism,
+ jdkMajorVersion = JavaVersion.majorVersion)
+ }
+
"auto-scale the default (minimum-runnable not set) on JDK 25+" in {
if (JavaVersion.majorVersion < 25) pending
diff --git a/actor/src/main/resources/reference.conf b/actor/src/main/resources/reference.conf
index fb2fc0a7d0..5474a38432 100644
--- a/actor/src/main/resources/reference.conf
+++ b/actor/src/main/resources/reference.conf
@@ -354,6 +354,10 @@ pekko {
router = "round-robin-pool"
nr-of-instances = 1
}
+
+ "/IO-DNS/async-dns/*" {
+ dispatcher = ${pekko.io.dns.dispatcher}
+ }
}
default-dispatcher {
@@ -634,6 +638,7 @@ pekko {
parallelism-min = 4
parallelism-factor = 1.0
parallelism-max = 64
+ minimum-runnable = -1
}
}
diff --git a/discovery/src/main/resources/reference.conf b/discovery/src/main/resources/reference.conf
index 05f1fc2ae9..aa6a29e5d7 100644
--- a/discovery/src/main/resources/reference.conf
+++ b/discovery/src/main/resources/reference.conf
@@ -10,6 +10,10 @@ pekko.actor.deployment {
router = "round-robin-pool"
nr-of-instances = 1
}
+
+ "/SD-DNS/async-dns/*" {
+ dispatcher = ${pekko.io.dns.dispatcher}
+ }
}
pekko.discovery {
@@ -74,4 +78,3 @@ pekko.discovery {
class = org.apache.pekko.discovery.dns.DnsServiceDiscovery
}
}
-
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org