This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new bba832139c ARTEMIS-4514 make Jetty thread pool configurable
bba832139c is described below

commit bba832139cb5e02f9cf716d24cf6cde867b94ed6
Author: Justin Bertram <[email protected]>
AuthorDate: Tue Nov 28 12:52:30 2023 -0600

    ARTEMIS-4514 make Jetty thread pool configurable
---
 .../apache/activemq/artemis/dto/WebServerDTO.java  | 33 ++++++++++++++++++++++
 .../artemis/component/WebServerComponent.java      |  7 ++++-
 .../activemq/cli/test/WebServerComponentTest.java  | 23 +++++++++++++++
 docs/user-manual/web-server.adoc                   |  8 ++++++
 4 files changed, 70 insertions(+), 1 deletion(-)

diff --git 
a/artemis-dto/src/main/java/org/apache/activemq/artemis/dto/WebServerDTO.java 
b/artemis-dto/src/main/java/org/apache/activemq/artemis/dto/WebServerDTO.java
index b6360113dd..94dd61b954 100644
--- 
a/artemis-dto/src/main/java/org/apache/activemq/artemis/dto/WebServerDTO.java
+++ 
b/artemis-dto/src/main/java/org/apache/activemq/artemis/dto/WebServerDTO.java
@@ -95,6 +95,15 @@ public class WebServerDTO extends ComponentDTO {
    @XmlAttribute
    public Boolean webContentEnabled;
 
+   @XmlAttribute
+   public Integer maxThreads = 200;
+
+   @XmlAttribute
+   public Integer minThreads = Math.min(8, maxThreads);
+
+   @XmlAttribute
+   public Integer idleThreadTimeout = 60000;
+
    public String getPath() {
       return path;
    }
@@ -135,6 +144,30 @@ public class WebServerDTO extends ComponentDTO {
       this.webContentEnabled = webContentEnabled;
    }
 
+   public Integer getMaxThreads() {
+      return maxThreads;
+   }
+
+   public void setMaxThreads(Integer maxThreads) {
+      this.maxThreads = maxThreads;
+   }
+
+   public Integer getMinThreads() {
+      return minThreads;
+   }
+
+   public void setMinThreads(Integer minThreads) {
+      this.minThreads = minThreads;
+   }
+
+   public Integer getIdleThreadTimeout() {
+      return idleThreadTimeout;
+   }
+
+   public void setIdleThreadTimeout(Integer idleThreadTimeout) {
+      this.idleThreadTimeout = idleThreadTimeout;
+   }
+
    public List<BindingDTO> getBindings() {
       return bindings;
    }
diff --git 
a/artemis-web/src/main/java/org/apache/activemq/artemis/component/WebServerComponent.java
 
b/artemis-web/src/main/java/org/apache/activemq/artemis/component/WebServerComponent.java
index f1d1300d03..1d6d9b7bb3 100644
--- 
a/artemis-web/src/main/java/org/apache/activemq/artemis/component/WebServerComponent.java
+++ 
b/artemis-web/src/main/java/org/apache/activemq/artemis/component/WebServerComponent.java
@@ -52,6 +52,7 @@ import org.eclipse.jetty.server.handler.HandlerList;
 import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.webapp.WebAppContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -99,7 +100,7 @@ public class WebServerComponent implements 
ExternalComponent, WebServerComponent
       }
       ActiveMQWebLogger.LOGGER.startingEmbeddedWebServer();
 
-      server = new Server();
+      server = new Server(new QueuedThreadPool(webServerConfig.maxThreads, 
webServerConfig.minThreads, webServerConfig.idleThreadTimeout));
       handlers = new HandlerList();
 
       HttpConfiguration httpConfiguration = new HttpConfiguration();
@@ -411,4 +412,8 @@ public class WebServerComponent implements 
ExternalComponent, WebServerComponent
    public List<Pair<WebAppContext, String>> getWebContextData() {
       return this.webContextData;
    }
+
+   public Server getWebServer() {
+      return server;
+   }
 }
diff --git 
a/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerComponentTest.java
 
b/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerComponentTest.java
index bdd7e7dd56..89703333d7 100644
--- 
a/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerComponentTest.java
+++ 
b/artemis-web/src/test/java/org/apache/activemq/cli/test/WebServerComponentTest.java
@@ -89,6 +89,7 @@ import org.apache.http.impl.conn.DefaultRoutePlanner;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.ssl.SSLContextBuilder;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.ThreadPool;
 import org.eclipse.jetty.webapp.WebAppContext;
 import org.eclipse.jetty.webapp.WebInfConfiguration;
 import org.junit.After;
@@ -179,6 +180,28 @@ public class WebServerComponentTest extends Assert {
       Assert.assertFalse(webServerComponent.isStarted());
    }
 
+   @Test
+   public void testThreadPool() throws Exception {
+      BindingDTO bindingDTO = new BindingDTO();
+      bindingDTO.uri = "http://localhost:0";;
+      WebServerDTO webServerDTO = new WebServerDTO();
+      webServerDTO.setBindings(Collections.singletonList(bindingDTO));
+      webServerDTO.path = "webapps";
+      webServerDTO.webContentEnabled = true;
+      webServerDTO.maxThreads = 75;
+      webServerDTO.minThreads = 50;
+      WebServerComponent webServerComponent = new WebServerComponent();
+      Assert.assertFalse(webServerComponent.isStarted());
+      webServerComponent.configure(webServerDTO, "./src/test/resources/", 
"./src/test/resources/");
+      testedComponents.add(webServerComponent);
+      webServerComponent.start();
+      ThreadPool.SizedThreadPool jettyPool = (ThreadPool.SizedThreadPool) 
webServerComponent.getWebServer().getThreadPool();
+      assertEquals((long) webServerDTO.minThreads, jettyPool.getMinThreads());
+      assertEquals((long) webServerDTO.maxThreads, jettyPool.getMaxThreads());
+      webServerComponent.stop(true);
+      Assert.assertFalse(webServerComponent.isStarted());
+   }
+
    @Test
    public void testComponentStopBehavior() throws Exception {
       BindingDTO bindingDTO = new BindingDTO();
diff --git a/docs/user-manual/web-server.adoc b/docs/user-manual/web-server.adoc
index 05a9bc4623..f25e1fdcaa 100644
--- a/docs/user-manual/web-server.adoc
+++ b/docs/user-manual/web-server.adoc
@@ -35,6 +35,14 @@ The location to redirect the requests with the root target.
 webContentEnabled::
 Whether or not the content included in the web folder of the home and the 
instance directories is accessible.
 Default is `false`.
+maxThreads::
+The maximum number of threads the embedded web server can create to service 
HTTP requests.
+Default is `200`.
+minThreads::
+The minimum number of threads the embedded web server will hold to service 
HTTP requests.
+Default is `8` or the value of `maxThreads` if it is lower.
+idleThreadTimeout::
+The time to wait before terminating an idle thread from the embedded web 
server. Measured in milliseconds. Default is `60000`.
 
 === Binding
 

Reply via email to