Repository: drill Updated Branches: refs/heads/master 9073aed67 -> cf2478f7a
DRILL-5994: Enable configuring number of Jetty acceptors and selectors (default to 1 acceptor and 2 selectors) closes #1148 Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/49faae04 Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/49faae04 Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/49faae04 Branch: refs/heads/master Commit: 49faae0452935e9ee1054c056df3e038391048ba Parents: 9073aed Author: Vlad Rozov <vro...@apache.org> Authored: Fri Mar 2 10:39:31 2018 -0800 Committer: Arina Ielchiieva <arina.yelchiy...@gmail.com> Committed: Sat Mar 3 19:47:31 2018 +0200 ---------------------------------------------------------------------- .../org/apache/drill/exec/ExecConstants.java | 3 +- .../drill/exec/server/rest/WebServer.java | 55 +++++++++----------- .../src/main/resources/drill-module.conf | 11 ++-- 3 files changed, 34 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/49faae04/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java b/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java index fb2907d..54fb46a 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java @@ -142,6 +142,8 @@ public final class ExecConstants { public static final String HTTP_MAX_PROFILES = "drill.exec.http.max_profiles"; public static final String HTTP_PORT = "drill.exec.http.port"; public static final String HTTP_PORT_HUNT = "drill.exec.http.porthunt"; + public static final String HTTP_JETTY_SERVER_ACCEPTORS = "drill.exec.http.jetty.server.acceptors"; + public static final String HTTP_JETTY_SERVER_SELECTORS = "drill.exec.http.jetty.server.selectors"; public static final String HTTP_ENABLE_SSL = "drill.exec.http.ssl_enabled"; public static final String HTTP_CORS_ENABLED = "drill.exec.http.cors.enabled"; public static final String HTTP_CORS_ALLOWED_ORIGINS = "drill.exec.http.cors.allowedOrigins"; @@ -174,7 +176,6 @@ public final class ExecConstants { public static final String USE_LOGIN_PRINCIPAL = "drill.exec.security.bit.auth.use_login_principal"; public static final String USER_ENCRYPTION_SASL_ENABLED = "drill.exec.security.user.encryption.sasl.enabled"; public static final String USER_ENCRYPTION_SASL_MAX_WRAPPED_SIZE = "drill.exec.security.user.encryption.sasl.max_wrapped_size"; - public static final String WEB_SERVER_THREAD_POOL_MAX = "drill.exec.web_server.thread_pool_max"; public static final String USER_SSL_ENABLED = "drill.exec.security.user.encryption.ssl.enabled"; public static final String BIT_ENCRYPTION_SASL_ENABLED = "drill.exec.security.bit.encryption.sasl.enabled"; http://git-wip-us.apache.org/repos/asf/drill/blob/49faae04/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java index 4566e7d..bfb6d90 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java @@ -111,8 +111,6 @@ public class WebServer implements AutoCloseable { private final Drillbit drillbit; - private int port; - /** * Create Jetty based web server. * @@ -154,35 +152,31 @@ public class WebServer implements AutoCloseable { final boolean authEnabled = config.getBoolean(ExecConstants.USER_AUTHENTICATION_ENABLED); - port = config.getInt(ExecConstants.HTTP_PORT); - boolean portHunt = config.getBoolean(ExecConstants.HTTP_PORT_HUNT); - int retry = 0; - - for (; retry < PORT_HUNT_TRIES; retry++) { - embeddedJetty = new Server(new QueuedThreadPool(config.getInt(ExecConstants.WEB_SERVER_THREAD_POOL_MAX))); - embeddedJetty.setHandler(createServletContextHandler(authEnabled)); - embeddedJetty.addConnector(createConnector(port)); - + int port = config.getInt(ExecConstants.HTTP_PORT); + final boolean portHunt = config.getBoolean(ExecConstants.HTTP_PORT_HUNT); + final int acceptors = config.getInt(ExecConstants.HTTP_JETTY_SERVER_ACCEPTORS); + final int selectors = config.getInt(ExecConstants.HTTP_JETTY_SERVER_SELECTORS); + final QueuedThreadPool threadPool = new QueuedThreadPool(2, 2, 60000); + embeddedJetty = new Server(threadPool); + embeddedJetty.setHandler(createServletContextHandler(authEnabled)); + ServerConnector connector = createConnector(port, acceptors, selectors); + threadPool.setMaxThreads(1 + connector.getAcceptors() + connector.getSelectorManager().getSelectorCount()); + embeddedJetty.addConnector(connector); + for (int retry = 0; retry < PORT_HUNT_TRIES; retry++) { + connector.setPort(port); try { embeddedJetty.start(); + return; } catch (BindException e) { if (portHunt) { - int nextPort = port + 1; - logger.info("Failed to start on port {}, trying port {}", port, nextPort); - port = nextPort; - embeddedJetty.stop(); + logger.info("Failed to start on port {}, trying port {}", port, ++port, e); continue; } else { throw e; } } - - break; - } - - if (retry == PORT_HUNT_TRIES) { - throw new IOException("Failed to find a port"); } + throw new IOException("Failed to find a port"); } private ServletContextHandler createServletContextHandler(final boolean authEnabled) throws DrillbitStartupException { @@ -302,23 +296,22 @@ public class WebServer implements AutoCloseable { } public int getPort() { - if (!config.getBoolean(ExecConstants.HTTP_ENABLE)) { + if (embeddedJetty == null || embeddedJetty.getConnectors().length != 1) { throw new UnsupportedOperationException("Http is not enabled"); } - - return port; + return ((ServerConnector)embeddedJetty.getConnectors()[0]).getPort(); } - private ServerConnector createConnector(int port) throws Exception { + private ServerConnector createConnector(int port, int acceptors, int selectors) throws Exception { final ServerConnector serverConnector; if (config.getBoolean(ExecConstants.HTTP_ENABLE_SSL)) { try { - serverConnector = createHttpsConnector(port); + serverConnector = createHttpsConnector(port, acceptors, selectors); } catch (DrillException e) { throw new DrillbitStartupException(e.getMessage(), e); } } else { - serverConnector = createHttpConnector(port); + serverConnector = createHttpConnector(port, acceptors, selectors); } return serverConnector; @@ -331,7 +324,7 @@ public class WebServer implements AutoCloseable { * @return Initialized {@link ServerConnector} for HTTPS connections. * @throws Exception */ - private ServerConnector createHttpsConnector(int port) throws Exception { + private ServerConnector createHttpsConnector(int port, int acceptors, int selectors) throws Exception { logger.info("Setting up HTTPS connector for web server"); final SslContextFactory sslContextFactory = new SslContextFactory(); @@ -411,6 +404,7 @@ public class WebServer implements AutoCloseable { // SSL Connector final ServerConnector sslConnector = new ServerConnector(embeddedJetty, + null, null, null, acceptors, selectors, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(httpsConfig)); sslConnector.setPort(port); @@ -424,10 +418,11 @@ public class WebServer implements AutoCloseable { * @return Initialized {@link ServerConnector} instance for HTTP connections. * @throws Exception */ - private ServerConnector createHttpConnector(int port) throws Exception { + private ServerConnector createHttpConnector(int port, int acceptors, int selectors) throws Exception { logger.info("Setting up HTTP connector for web server"); final HttpConfiguration httpConfig = new HttpConfiguration(); - final ServerConnector httpConnector = new ServerConnector(embeddedJetty, new HttpConnectionFactory(httpConfig)); + final ServerConnector httpConnector = + new ServerConnector(embeddedJetty, null, null, null, acceptors, selectors, new HttpConnectionFactory(httpConfig)); httpConnector.setPort(port); return httpConnector; http://git-wip-us.apache.org/repos/asf/drill/blob/49faae04/exec/java-exec/src/main/resources/drill-module.conf ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/resources/drill-module.conf b/exec/java-exec/src/main/resources/drill-module.conf index 2305a30..fc365d2 100644 --- a/exec/java-exec/src/main/resources/drill-module.conf +++ b/exec/java-exec/src/main/resources/drill-module.conf @@ -120,6 +120,12 @@ drill.exec: { ssl_enabled: false, porthunt: false, port: 8047, + jetty : { + server : { + acceptors : 1, + selectors : 2 + } + } max_profiles: 100, session_max_idle_secs: 3600, # Default value 1hr cors: { @@ -379,10 +385,7 @@ drill.exec: { # refresh time. grace_period_ms : 0, //port hunting for drillbits. Enabled only for testing purposes. - port_hunt : false, - // Max threads of embedded Jetty - web_server.thread_pool_max: 200 - + port_hunt : false } drill.jdbc: {