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]

Reply via email to