[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384311#comment-16384311 ] ASF GitHub Bot commented on DRILL-5994: --- Github user vrozov commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171989096 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -424,10 +418,11 @@ private ServerConnector createHttpsConnector(int port) throws Exception { * @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)); --- End diff -- I don't think there is such constructor (only one that takes `SslContextFactory` as the last argument), please double check. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384310#comment-16384310 ] ASF GitHub Bot commented on DRILL-5994: --- Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171988996 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -154,35 +152,31 @@ public void start() throws Exception { 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, 6); +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); --- End diff -- I see thx > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384309#comment-16384309 ] ASF GitHub Bot commented on DRILL-5994: --- Github user vrozov commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171988826 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -411,6 +404,7 @@ private ServerConnector createHttpsConnector(int port) throws Exception { // SSL Connector final ServerConnector sslConnector = new ServerConnector(embeddedJetty, +null, null, null, -1, -1, --- End diff -- good catch đź‘Ť > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384304#comment-16384304 ] ASF GitHub Bot commented on DRILL-5994: --- Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171988104 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -411,6 +404,7 @@ private ServerConnector createHttpsConnector(int port) throws Exception { // SSL Connector final ServerConnector sslConnector = new ServerConnector(embeddedJetty, +null, null, null, -1, -1, --- End diff -- Why not use the configured values for HTTPS? > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384302#comment-16384302 ] ASF GitHub Bot commented on DRILL-5994: --- Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171987969 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -424,10 +418,11 @@ private ServerConnector createHttpsConnector(int port) throws Exception { * @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)); --- End diff -- Why not ``` new ServerConnector(embeddedJetty, acceptors, selectors, new HttpConnectionFactory(httpConfig)); ``` > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384299#comment-16384299 ] ASF GitHub Bot commented on DRILL-5994: --- Github user vrozov commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171987801 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -154,35 +152,31 @@ public void start() throws Exception { 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, 6); +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); --- End diff -- The QueuedThreadPool is now provided and will be reused. Please see line 159. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384292#comment-16384292 ] ASF GitHub Bot commented on DRILL-5994: --- Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171986550 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -154,35 +152,31 @@ public void start() throws Exception { 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, 6); +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); --- End diff -- Originally I stopped the jetty server in the event that a BindException was throw since it looks like jetty starts it's beans before it starts its connectors (see org.eclipse.jetty.server.Server#doStart). Since the thread pool is treated like a bean by Jetty this means the ThreadPool is started before the connectors are started. So if a connector fails with a BindException then we will have a leaked QueuedThreadPool. My understanding is if we want to release resources created during a failed start we would have to stop the jetty server after a failure. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384236#comment-16384236 ] ASF GitHub Bot commented on DRILL-5994: --- GitHub user vrozov opened a pull request: https://github.com/apache/drill/pull/1148 DRILL-5994: enable configuring number of Jetty acceptors and selectors (default to 1 acceptor and 2 selectors) @arina-ielchiieva @ilooner @MitchelLabonte Please review You can merge this pull request into a Git repository by running: $ git pull https://github.com/vrozov/drill DRILL-5994 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/drill/pull/1148.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #1148 commit d4feca33e71218905ac5ea1aad55c0b77af2c305 Author: Vlad Rozov Date: 2018-03-02T18:39:31Z DRILL-5994: enable configuring number of Jetty acceptors and selectors (default to 1 acceptor and 2 selectors) > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16330962#comment-16330962 ] Mitchel Labonte commented on DRILL-5994: [~priteshm] I applied the fix I proposed on my installation and it works, I didn't have time to try [~vrozov]'s proposal, but I assume it would probably work too indeed. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16330945#comment-16330945 ] Pritesh Maker commented on DRILL-5994: -- [~arina], [~Mitchel] do you have any more comments on this one? Seems like [~vrozov] is saying that we should have an alternate fix. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Assignee: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16321461#comment-16321461 ] ASF GitHub Bot commented on DRILL-5994: --- Github user vrozov commented on the issue: https://github.com/apache/drill/pull/1069 @MitchelLabonte My proposal is to limit the number of acceptors instead of allowing to increase the max number of threads in the connection pool. If the number of acceptors is limited, the number of "needed" threads will be limited too and the exception will not be raised. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16321413#comment-16321413 ] ASF GitHub Bot commented on DRILL-5994: --- Github user MitchelLabonte commented on the issue: https://github.com/apache/drill/pull/1069 @vrozov the Web server definitely doesn't need this much, but Drill won't launch on a machine with more than 200 cores and throw an exception: Exception in thread "main" org.apache.drill.exec.exception.DrillStartupException: Failure during initial startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more The configuration is there to have an option to not hit this exception on startup on a machine with more than 200 cores. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16321148#comment-16321148 ] ASF GitHub Bot commented on DRILL-5994: --- Github user vrozov commented on the issue: https://github.com/apache/drill/pull/1069 @MitchelLabonte @arina-ielchiieva I don't think that Drill needs that many threads/acceptors to handle HTTP(s) requests as it is not a real web (REST API) server. For proper resource utilization, it will be better to limit the number of acceptors to a small value (let's say 2 or 4 by default) instead of the current default that uses a number of available processors and can be huge on machines with lots of cores (32 or more). @paul-rogers What is your take on this? > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16308159#comment-16308159 ] ASF GitHub Bot commented on DRILL-5994: --- Github user asfgit closed the pull request at: https://github.com/apache/drill/pull/1069 > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16289015#comment-16289015 ] ASF GitHub Bot commented on DRILL-5994: --- Github user arina-ielchiieva commented on the issue: https://github.com/apache/drill/pull/1069 +1, LGTM. > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Bug >Affects Versions: 1.11.0 >Reporter: Mitchel Labonte >Priority: Minor > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16287766#comment-16287766 ] ASF GitHub Bot commented on DRILL-5994: --- Github user arina-ielchiieva commented on a diff in the pull request: https://github.com/apache/drill/pull/1069#discussion_r156403329 --- Diff: exec/java-exec/src/main/resources/drill-module.conf --- @@ -377,7 +377,9 @@ drill.exec: { # refresh time. grace_period_ms : 0, //port hunting for drillbits. Enabled only for testing purposes. - port_hunt : false + port_hunt : false, + // Max threads of embedded Jetty + webserver.threadpool_max: 200 --- End diff -- Please add underscores: `web_server.thread_pool_max` > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Bug >Reporter: Mitchel Labonte >Priority: Minor > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (DRILL-5994) Cannot start web server on a machine with more than 200 cores
[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16287746#comment-16287746 ] ASF GitHub Bot commented on DRILL-5994: --- GitHub user MitchelLabonte opened a pull request: https://github.com/apache/drill/pull/1069 DRILL-5994 Added webserver maxThreads configuration option to enable … …launching on a machine with more than 200 cores You can merge this pull request into a Git repository by running: $ git pull https://github.com/MitchelLabonte/drill DRILL-5994 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/drill/pull/1069.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #1069 commit af4e99f16be4081f151024688d2fd5cd306b219b Author: mitchel Date: 2017-12-12T15:27:19Z DRILL-5994 Added webserver maxThreads configuration option to enable launching on a machine with more than 200 cores > Cannot start web server on a machine with more than 200 cores > - > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Bug >Reporter: Mitchel Labonte >Priority: Minor > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. -- This message was sent by Atlassian JIRA (v6.4.14#64029)