This is an automated email from the ASF dual-hosted git repository.
pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-management.git
The following commit(s) were added to refs/heads/main by this push:
new 7fccd0ce add graceful shutdown to management core (#909)
7fccd0ce is described below
commit 7fccd0ce85476775afeac816de7bfb7fc2e5573e
Author: PJ Fanning <[email protected]>
AuthorDate: Sat Aug 8 21:51:33 2026 +0100
add graceful shutdown to management core (#909)
* add graceful shutdown
* Update PekkoManagementSettings.scala
---
management/src/main/resources/reference.conf | 4 ++++
.../apache/pekko/management/PekkoManagementSettings.scala | 12 +++++++++++-
.../apache/pekko/management/scaladsl/PekkoManagement.scala | 4 +++-
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/management/src/main/resources/reference.conf
b/management/src/main/resources/reference.conf
index c5bd579f..10ab0f71 100644
--- a/management/src/main/resources/reference.conf
+++ b/management/src/main/resources/reference.conf
@@ -70,6 +70,10 @@ pekko.management {
# Should Management route providers only expose read only endpoints? It is
up to each route provider
# to adhere to this property
route-providers-read-only = true
+
+ # How long to wait for in-flight requests to complete during graceful
shutdown.
+ # After this deadline, remaining connections are forcibly terminated.
+ graceful-termination-timeout = 5s
}
# Health checks for startup, readiness and liveness
diff --git
a/management/src/main/scala/org/apache/pekko/management/PekkoManagementSettings.scala
b/management/src/main/scala/org/apache/pekko/management/PekkoManagementSettings.scala
index e6c38ed7..74e5efa6 100644
---
a/management/src/main/scala/org/apache/pekko/management/PekkoManagementSettings.scala
+++
b/management/src/main/scala/org/apache/pekko/management/PekkoManagementSettings.scala
@@ -17,7 +17,9 @@ import java.net.InetAddress
import java.util.Optional
import scala.collection.immutable
+import scala.concurrent.duration.{ Duration, FiniteDuration }
import scala.jdk.CollectionConverters._
+import scala.jdk.DurationConverters._
import scala.jdk.OptionConverters._
import org.apache.pekko
@@ -31,7 +33,7 @@ final class PekkoManagementSettings(val config: Config) {
object Http {
private val cc = managementConfig.getConfig("http")
- val Hostname: String = {
+ lazy val Hostname: String = {
val hostname = cc.getString("hostname")
if (hostname == "<hostname>") InetAddress.getLocalHost.getHostAddress
else if (hostname.trim() == "") InetAddress.getLocalHost.getHostAddress
@@ -78,6 +80,14 @@ final class PekkoManagementSettings(val config: Config) {
}
val RouteProvidersReadOnly: Boolean =
cc.getBoolean("route-providers-read-only")
+
+ val GracefulTerminationTimeout: FiniteDuration = {
+ val d = cc.getDuration("graceful-termination-timeout").toScala
+ require(
+ d > Duration.Zero,
+ s"pekko.management.http.graceful-termination-timeout must be positive
(was $d)")
+ d
+ }
}
/** Java API */
diff --git
a/management/src/main/scala/org/apache/pekko/management/scaladsl/PekkoManagement.scala
b/management/src/main/scala/org/apache/pekko/management/scaladsl/PekkoManagement.scala
index 83f760d9..9c03cb10 100644
---
a/management/src/main/scala/org/apache/pekko/management/scaladsl/PekkoManagement.scala
+++
b/management/src/main/scala/org/apache/pekko/management/scaladsl/PekkoManagement.scala
@@ -238,7 +238,9 @@ final class PekkoManagement(implicit private[pekko] val
system: ExtendedActorSys
if (binding == null) {
Future.successful(Done)
} else if (bindingFuture.compareAndSet(binding, null)) {
- binding._2.flatMap(_.unbind()).map((_: Any) => Done)
+ binding._2
+ .flatMap(_.terminate(settings.Http.GracefulTerminationTimeout))
+ .map((_: Any) => Done)
} else stop() // retry, CAS was not successful, someone else completed the
stop()
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]