summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorn.christian@seime.no>2019-03-13 17:59:10 +0100
committerGitHub <noreply@github.com>2019-03-13 17:59:10 +0100
commit820a730d7efede2a84133170639d624f7939e358 (patch)
treeaa2c84adabbec3cfe543734cc8e98c9cc3aa913b /jdisc_http_service/src
parentcbd512e52fadbb4c0135550ef057c2cb27540977 (diff)
parent2cc608cc44522d046f0609899cd39ccf6a96b251 (diff)
Merge pull request #8778 from vespa-engine/bjorncs/jetty-graceful-shutdown
Bjorncs/jetty graceful shutdown
Diffstat (limited to 'jdisc_http_service/src')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorFactory.java1
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java8
-rw-r--r--jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def3
-rw-r--r--jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def3
4 files changed, 10 insertions, 5 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorFactory.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorFactory.java
index 5d3550db9d2..c9586530734 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorFactory.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorFactory.java
@@ -48,7 +48,6 @@ public class ConnectorFactory {
connector.setAcceptQueueSize(connectorConfig.acceptQueueSize());
connector.setReuseAddress(connectorConfig.reuseAddress());
connector.setIdleTimeout((long)(connectorConfig.idleTimeout() * 1000.0));
- connector.setStopTimeout((long)(connectorConfig.stopTimeout() * 1000.0));
return connector;
}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
index 07d3d77dff2..0dbc5f59f67 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java
@@ -40,7 +40,6 @@ import org.osgi.framework.ServiceReference;
import javax.management.remote.JMXServiceURL;
import javax.servlet.DispatcherType;
-
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.BindException;
@@ -141,6 +140,7 @@ public class JettyHttpServer extends AbstractServerProvider {
initializeJettyLogging();
server = new Server();
+ server.setStopTimeout((long)(serverConfig.stopTimeout() * 1000.0));
server.setRequestLog(new AccessLogRequestLog(accessLog));
setupJmx(server, serverConfig);
((QueuedThreadPool)server.getThreadPool()).setMaxThreads(serverConfig.maxWorkerThreads());
@@ -307,7 +307,9 @@ public class JettyHttpServer extends AbstractServerProvider {
@Override
public void close() {
try {
+ log.log(Level.INFO, String.format("Shutting down server (graceful=%b, timeout=%.1fs)", isGracefulShutdownEnabled(), server.getStopTimeout()/1000d));
server.stop();
+ log.log(Level.INFO, "Server shutdown completed");
} catch (final Exception e) {
log.log(Level.SEVERE, "Server shutdown threw an unexpected exception.", e);
}
@@ -316,6 +318,10 @@ public class JettyHttpServer extends AbstractServerProvider {
janitor.shutdown();
}
+ private boolean isGracefulShutdownEnabled() {
+ return server.getChildHandlersByClass(StatisticsHandler.class).length > 0 && server.getStopTimeout() > 0;
+ }
+
public int getListenPort() {
return ((ServerConnector)server.getConnectors()[0]).getLocalPort();
}
diff --git a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
index 30c74ed2c35..5d9b9d2cc0d 100644
--- a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
+++ b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
@@ -28,9 +28,6 @@ reuseAddress bool default=true
# The maximum idle time for a connection, which roughly translates to the Socket.setSoTimeout(int).
idleTimeout double default=180.0
-# The stop timeout.
-stopTimeout double default=30.0
-
# Whether or not to have socket keep alive turned on.
tcpKeepAliveEnabled bool default=false
diff --git a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
index a6cb43cee17..0836a080e1f 100644
--- a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
+++ b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.server.def
@@ -27,6 +27,9 @@ filter[].binding string
# Max number of threads in pool
maxWorkerThreads int default = 200
+# Stop timeout in seconds. The maximum allowed time to process in-flight requests during server shutdown. Setting it to 0 disable graceful shutdown.
+stopTimeout double default = 30.0
+
# Enable embedded JMX server. Note: only accessible through the loopback interface.
jmx.enabled bool default = false