This is an automated email from the ASF dual-hosted git repository.
chengpan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 4390cc6fa [KYUUBI #6058] Make Jetty server stop timeout configurable
4390cc6fa is described below
commit 4390cc6fa410d198543e57695e00f168bf4d2953
Author: Cheng Pan <[email protected]>
AuthorDate: Sat Feb 17 00:38:44 2024 +0800
[KYUUBI #6058] Make Jetty server stop timeout configurable
# :mag: Description
## Issue References ๐
This pull request aims to make the Jetty server stop timeout configurable.
The RESTful frontend protocol has been enabled by default since 1.8.0,
while a side-effect is observed, the process shutdown is always blocked by the
Jetty server until reaches the default 30s timeout.
## Describe Your Solution ๐ง
Two configurations are introduced in this PR
```
kyuubi.frontend.trino.jetty.stopTimeout=5s
kyuubi.frontend.rest.jetty.stopTimeout=5s
```
while the 5s is chosen as the default value according to
https://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-server/src/main/config/etc/jetty.xml?h=jetty-9.3.x#n124
## Types of changes :bookmark:
- [ ] Bugfix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
## Test Plan ๐งช
1. perform `bin/kyuubi run`
2. press `ctrl + c` to shutdown the Kyuubi process
#### Behavior Without This Pull Request :coffin:
takes ~30s to complete the shutdown progress.
#### Behavior With This Pull Request :tada:
takes ~5s to complete the shutdown progress.
---
# Checklist ๐
- [x] This patch was not authored or co-authored using [Generative
Tooling](https://www.apache.org/legal/generative-tooling.html)
**Be nice. Be informative.**
Closes #6058 from pan3793/jetty-timeout.
Closes #6058
47d15f9aa [Cheng Pan] fix
cbac2b13e [Cheng Pan] Make Jetty server stop timeout configurable
Authored-by: Cheng Pan <[email protected]>
Signed-off-by: Cheng Pan <[email protected]>
---
docs/configuration/settings.md | 2 ++
.../main/scala/org/apache/kyuubi/config/KyuubiConf.scala | 14 ++++++++++++++
.../apache/kyuubi/server/KyuubiRestFrontendService.scala | 3 ++-
.../apache/kyuubi/server/KyuubiTrinoFrontendService.scala | 5 +++--
.../scala/org/apache/kyuubi/server/ui/JettyServer.scala | 8 +++++++-
5 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/docs/configuration/settings.md b/docs/configuration/settings.md
index 9ef978661..a2dd795f5 100644
--- a/docs/configuration/settings.md
+++ b/docs/configuration/settings.md
@@ -248,6 +248,7 @@ You can configure the Kyuubi properties in
`$KYUUBI_HOME/conf/kyuubi-defaults.co
| kyuubi.frontend.proxy.http.client.ip.header | X-Real-IP
| The HTTP header to record the real client IP address. If your server is
behind a load balancer or other proxy, the server will see this load balancer
or proxy IP address as the client IP address, to get around this common issue,
most load balancers or proxies offer the ability to record the real remote IP
address in an HTTP header that will be added to the request for other devices
to use. Note that, because [...]
| kyuubi.frontend.rest.bind.host | <undefined>
| Hostname or IP of the machine on which to run the REST frontend service.
[...]
| kyuubi.frontend.rest.bind.port | 10099
| Port of the machine on which to run the REST frontend service.
[...]
+| kyuubi.frontend.rest.jetty.stopTimeout | PT5S
| Stop timeout for Jetty server used by the RESTful frontend service.
[...]
| kyuubi.frontend.rest.max.worker.threads | 999
| Maximum number of threads in the frontend worker thread pool for the rest
frontend service
[...]
| kyuubi.frontend.ssl.keystore.algorithm | <undefined>
| SSL certificate keystore algorithm.
[...]
| kyuubi.frontend.ssl.keystore.password | <undefined>
| SSL certificate keystore password.
[...]
@@ -284,6 +285,7 @@ You can configure the Kyuubi properties in
`$KYUUBI_HOME/conf/kyuubi-defaults.co
| kyuubi.frontend.thrift.worker.keepalive.time | PT1M
| Keep-alive time (in milliseconds) for an idle worker thread
[...]
| kyuubi.frontend.trino.bind.host | <undefined>
| Hostname or IP of the machine on which to run the TRINO frontend service.
[...]
| kyuubi.frontend.trino.bind.port | 10999
| Port of the machine on which to run the TRINO frontend service.
[...]
+| kyuubi.frontend.trino.jetty.stopTimeout | PT5S
| Stop timeout for Jetty server used by the Trino frontend service.
[...]
| kyuubi.frontend.trino.max.worker.threads | 999
| Maximum number of threads in the frontend worker thread pool for the Trino
frontend service
[...]
| kyuubi.frontend.worker.keepalive.time | PT1M
| (deprecated) Keep-alive time (in milliseconds) for an idle worker thread
[...]
diff --git
a/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala
b/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala
index caeecf9f0..5346d19a2 100644
--- a/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala
+++ b/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala
@@ -571,6 +571,13 @@ object KyuubiConf {
.version("1.6.2")
.fallbackConf(FRONTEND_MAX_WORKER_THREADS)
+ val FRONTEND_REST_JETTY_STOP_TIMEOUT: ConfigEntry[Long] =
+ buildConf("kyuubi.frontend.rest.jetty.stopTimeout")
+ .doc("Stop timeout for Jetty server used by the RESTful frontend
service.")
+ .version("1.8.1")
+ .timeConf
+ .createWithDefaultString("PT5S")
+
val FRONTEND_WORKER_KEEPALIVE_TIME: ConfigEntry[Long] =
buildConf("kyuubi.frontend.worker.keepalive.time")
.doc("(deprecated) Keep-alive time (in milliseconds) for an idle worker
thread")
@@ -1124,6 +1131,13 @@ object KyuubiConf {
.version("1.7.0")
.fallbackConf(FRONTEND_MAX_WORKER_THREADS)
+ val FRONTEND_TRINO_JETTY_STOP_TIMEOUT: ConfigEntry[Long] =
+ buildConf("kyuubi.frontend.trino.jetty.stopTimeout")
+ .doc("Stop timeout for Jetty server used by the Trino frontend service.")
+ .version("1.8.1")
+ .timeConf
+ .createWithDefaultString("PT5S")
+
val KUBERNETES_CONTEXT: OptionalConfigEntry[String] =
buildConf("kyuubi.kubernetes.context")
.doc("The desired context from your kubernetes config file used to
configure the K8s " +
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala
index 83aee66fe..a3dd40389 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala
@@ -89,7 +89,8 @@ class KyuubiRestFrontendService(override val serverable:
Serverable)
getName,
host,
port,
- conf.get(FRONTEND_REST_MAX_WORKER_THREADS))
+ conf.get(FRONTEND_REST_MAX_WORKER_THREADS),
+ conf.get(FRONTEND_REST_JETTY_STOP_TIMEOUT))
super.initialize(conf)
}
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiTrinoFrontendService.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiTrinoFrontendService.scala
index 95f6d5902..bef0b6f93 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiTrinoFrontendService.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiTrinoFrontendService.scala
@@ -21,7 +21,7 @@ import java.util.concurrent.atomic.AtomicBoolean
import org.apache.kyuubi.{KyuubiException, Utils}
import org.apache.kyuubi.config.KyuubiConf
-import org.apache.kyuubi.config.KyuubiConf.{FRONTEND_ADVERTISED_HOST,
FRONTEND_TRINO_BIND_HOST, FRONTEND_TRINO_BIND_PORT,
FRONTEND_TRINO_MAX_WORKER_THREADS}
+import org.apache.kyuubi.config.KyuubiConf.{FRONTEND_ADVERTISED_HOST,
FRONTEND_TRINO_BIND_HOST, FRONTEND_TRINO_BIND_PORT,
FRONTEND_TRINO_JETTY_STOP_TIMEOUT, FRONTEND_TRINO_MAX_WORKER_THREADS}
import org.apache.kyuubi.server.trino.api.v1.ApiRootResource
import org.apache.kyuubi.server.ui.JettyServer
import org.apache.kyuubi.service.{AbstractFrontendService, Serverable, Service}
@@ -54,7 +54,8 @@ class KyuubiTrinoFrontendService(override val serverable:
Serverable)
getName,
host,
port,
- conf.get(FRONTEND_TRINO_MAX_WORKER_THREADS))
+ conf.get(FRONTEND_TRINO_MAX_WORKER_THREADS),
+ conf.get(FRONTEND_TRINO_JETTY_STOP_TIMEOUT))
super.initialize(conf)
}
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyServer.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyServer.scala
index 00b172f2c..7f4043534 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyServer.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyServer.scala
@@ -73,11 +73,17 @@ private[kyuubi] case class JettyServer(
object JettyServer {
- def apply(name: String, host: String, port: Int, poolSize: Int): JettyServer
= {
+ def apply(
+ name: String,
+ host: String,
+ port: Int,
+ poolSize: Int,
+ stopTimeout: Long): JettyServer = {
val pool = new QueuedThreadPool(poolSize)
pool.setName(name)
pool.setDaemon(true)
val server = new Server(pool)
+ server.setStopTimeout(stopTimeout)
val errorHandler = new ErrorHandler()
errorHandler.setShowStacks(true)