Author: markt
Date: Fri Nov 21 07:46:12 2008
New Revision: 719602
URL: http://svn.apache.org/viewvc?rev=719602&view=rev
Log:
Make size of all threads pools dynamically configurable
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardThreadExecutor.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardThreadExecutor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardThreadExecutor.java?rev=719602&r1=719601&r2=719602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardThreadExecutor.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardThreadExecutor.java Fri
Nov 21 07:46:12 2008
@@ -130,14 +130,23 @@
public void setMaxIdleTime(int maxIdleTime) {
this.maxIdleTime = maxIdleTime;
+ if (executor != null) {
+ executor.setKeepAliveTime(maxIdleTime, TimeUnit.MILLISECONDS);
+ }
}
public void setMaxThreads(int maxThreads) {
this.maxThreads = maxThreads;
+ if (executor != null) {
+ executor.setMaximumPoolSize(maxThreads);
+ }
}
public void setMinSpareThreads(int minSpareThreads) {
this.minSpareThreads = minSpareThreads;
+ if (executor != null) {
+ executor.setCorePoolSize(minSpareThreads);
+ }
}
public void setName(String name) {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=719602&r1=719601&r2=719602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Nov 21
07:46:12 2008
@@ -36,6 +36,7 @@
import org.apache.tomcat.jni.SSLSocket;
import org.apache.tomcat.jni.Socket;
import org.apache.tomcat.jni.Status;
+import org.apache.tomcat.util.net.JIoEndpoint.Worker;
import org.apache.tomcat.util.res.StringManager;
/**
@@ -179,7 +180,14 @@
* Maximum amount of worker threads.
*/
protected int maxThreads = 200;
- public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
+ public void setMaxThreads(int maxThreads) {
+ this.maxThreads = maxThreads;
+ if (running) {
+ synchronized(workers) {
+ workers.resize(maxThreads);
+ }
+ }
+ }
public int getMaxThreads() { return maxThreads; }
@@ -1883,12 +1891,18 @@
}
/**
- * Put the object into the queue.
+ * Put the object into the queue. If the queue is full (for example if
+ * the queue has been reduced in size) the object will be dropped.
*
- * @param object the object to be appended to the queue (first
element).
+ * @param object the object to be appended to the queue (first
+ * element).
*/
public void push(Worker worker) {
- workers[end++] = worker;
+ if (end < workers.length) {
+ workers[end++] = worker;
+ } else {
+ curThreads--;
+ }
}
/**
@@ -1923,6 +1937,22 @@
public int size() {
return (end);
}
+
+ /**
+ * Resize the queue. If there are too many objects in the queue for the
+ * new size, drop the excess.
+ *
+ * @param newSize
+ */
+ public void resize(int newSize) {
+ Worker[] newWorkers = new Worker[newSize];
+ int len = workers.length;
+ if (newSize < len) {
+ len = newSize;
+ }
+ System.arraycopy(workers, 0, newWorkers, 0, len);
+ workers = newWorkers;
+ }
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=719602&r1=719601&r2=719602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Fri Nov 21
07:46:12 2008
@@ -174,7 +174,14 @@
* Maximum amount of worker threads.
*/
protected int maxThreads = 200;
- public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
+ public void setMaxThreads(int maxThreads) {
+ this.maxThreads = maxThreads;
+ if (running) {
+ synchronized(workers) {
+ workers.resize(maxThreads);
+ }
+ }
+ }
public int getMaxThreads() { return maxThreads; }
@@ -777,12 +784,18 @@
}
/**
- * Put the object into the queue.
+ * Put the object into the queue. If the queue is full (for example if
+ * the queue has been reduced in size) the object will be dropped.
*
- * @param object the object to be appended to the queue (first
element).
+ * @param object the object to be appended to the queue (first
+ * element).
*/
public void push(Worker worker) {
- workers[end++] = worker;
+ if (end < workers.length) {
+ workers[end++] = worker;
+ } else {
+ curThreads--;
+ }
}
/**
@@ -817,6 +830,22 @@
public int size() {
return (end);
}
+
+ /**
+ * Resize the queue. If there are too many objects in the queue for the
+ * new size, drop the excess.
+ *
+ * @param newSize
+ */
+ public void resize(int newSize) {
+ Worker[] newWorkers = new Worker[newSize];
+ int len = workers.length;
+ if (newSize < len) {
+ len = newSize;
+ }
+ System.arraycopy(workers, 0, newWorkers, 0, len);
+ workers = newWorkers;
+ }
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=719602&r1=719601&r2=719602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Fri Nov 21
07:46:12 2008
@@ -52,6 +52,7 @@
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.IntrospectionUtils;
+import org.apache.tomcat.util.net.JIoEndpoint.Worker;
import org.apache.tomcat.util.net.SecureNioChannel.ApplicationBufferHandler;
import org.apache.tomcat.util.res.StringManager;
@@ -350,7 +351,14 @@
* Maximum amount of worker threads.
*/
protected int maxThreads = 200;
- public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
+ public void setMaxThreads(int maxThreads) {
+ this.maxThreads = maxThreads;
+ if (running) {
+ synchronized(workers) {
+ workers.resize(maxThreads);
+ }
+ }
+ }
public int getMaxThreads() { return maxThreads; }
@@ -2026,12 +2034,18 @@
}
/**
- * Put the object into the queue.
+ * Put the object into the queue. If the queue is full (for example if
+ * the queue has been reduced in size) the object will be dropped.
*
- * @param object the object to be appended to the queue (first
element).
+ * @param object the object to be appended to the queue (first
+ * element).
*/
public void push(Worker worker) {
- workers[end++] = worker;
+ if (end < workers.length) {
+ workers[end++] = worker;
+ } else {
+ curThreads--;
+ }
}
/**
@@ -2066,6 +2080,22 @@
public int size() {
return (end);
}
+
+ /**
+ * Resize the queue. If there are too many objects in the queue for the
+ * new size, drop the excess.
+ *
+ * @param newSize
+ */
+ public void resize(int newSize) {
+ Worker[] newWorkers = new Worker[newSize];
+ int len = workers.length;
+ if (newSize < len) {
+ len = newSize;
+ }
+ System.arraycopy(workers, 0, newWorkers, 0, len);
+ workers = newWorkers;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]