Commit the voted keepAliveTimeout patch.
authormturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 29 Nov 2006 12:26:37 +0000 (12:26 +0000)
committermturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 29 Nov 2006 12:26:37 +0000 (12:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@480552 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/ajp/AjpAprProtocol.java
java/org/apache/coyote/ajp/Constants.java
java/org/apache/coyote/http11/Constants.java
java/org/apache/coyote/http11/Http11AprProcessor.java
java/org/apache/coyote/http11/Http11AprProtocol.java
java/org/apache/coyote/http11/Http11Processor.java
java/org/apache/coyote/http11/Http11Protocol.java
java/org/apache/tomcat/util/net/AprEndpoint.java
webapps/docs/config/ajp.xml
webapps/docs/config/http.xml

index 75e7d4b..df04065 100644 (file)
@@ -433,7 +433,17 @@ public class AjpAprProtocol
         packetSize = i;
     }
 
-    
+    public int getKeepAliveTimeout() {
+        return ep.getKeepAliveTimeout();
+    }
+
+
+    public void setKeepAliveTimeout( int i ) {
+        ep.setKeepAliveTimeout(i);
+        setAttribute("keepAliveTimeout", "" + i);
+    }
+
+
     // --------------------------------------  AjpConnectionHandler Inner Class
 
 
index 99f2e38..68ec5aa 100644 (file)
@@ -42,6 +42,7 @@ public final class Constants {
     public static final int DEFAULT_CONNECTION_LINGER = -1;
     public static final int DEFAULT_CONNECTION_TIMEOUT = -1;
     public static final int DEFAULT_CONNECTION_UPLOAD_TIMEOUT = 300000;
+    public static final int DEFAULT_KEEPALIVE_TIMEOUT = 15000;
     public static final int DEFAULT_SERVER_SOCKET_TIMEOUT = 0;
     public static final boolean DEFAULT_TCP_NO_DELAY = true;
 
index ff07a60..5fafe94 100644 (file)
@@ -39,6 +39,7 @@ public final class Constants {
     public static final int DEFAULT_CONNECTION_LINGER = -1;
     public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
     public static final int DEFAULT_CONNECTION_UPLOAD_TIMEOUT = 300000;
+    public static final int DEFAULT_KEEPALIVE_TIMEOUT = 15000;
     public static final int DEFAULT_SERVER_SOCKET_TIMEOUT = 0;
     public static final boolean DEFAULT_TCP_NO_DELAY = true;
     
index 1227718..ef2371b 100644 (file)
@@ -209,6 +209,12 @@ public class Http11AprProcessor implements ActionHook {
      */
     protected int maxKeepAliveRequests = -1;
 
+    /**
+     * The number of seconds Tomcat will wait for a subsequent request
+     * before closing the connection.
+     */
+    protected int keepAliveTimeout = 15000;
+
 
     /**
      * SSL enabled ?
@@ -704,6 +710,19 @@ public class Http11AprProcessor implements ActionHook {
         return timeout;
     }
 
+    /**                                           
+     * Set the Keep-Alive timeout.
+     */
+    public void setKeepAliveTimeout(int timeout) {
+        keepAliveTimeout = timeout;
+    }
+
+    /**
+     * Return the number Keep-Alive timeout.
+     */
+    public int getKeepAliveTimeout() {
+        return keepAliveTimeout;
+    }
 
     /**
      * Set the server header name.
index bcfefce..1df4c82 100644 (file)
@@ -202,6 +202,7 @@ public class Http11AprProtocol implements ProtocolHandler, MBeanRegistration
     private int socketBuffer = 9000;
     private Adapter adapter;
     private Http11ConnectionHandler cHandler;
+    private int keepAliveTimeout = 15000; // 15 seconds as in Apache HTTPD server
 
     /**
      * Compression value.
@@ -463,11 +464,20 @@ public class Http11AprProtocol implements ProtocolHandler, MBeanRegistration
         setAttribute("maxKeepAliveRequests", "" + mkar);
     }
 
+                                                                                
     /**
-     * Return the Keep-Alive policy for the connection.
+     * The number of seconds Tomcat will wait for a subsequent request
+     * before closing the connection. The default is the same as for
+     * Apache HTTP Server (15 000 milliseconds).
      */
-    public boolean getKeepAlive() {
-        return ((maxKeepAliveRequests != 0) && (maxKeepAliveRequests != 1));
+    public int getKeepAliveTimeout() 
+    {
+        return keepAliveTimeout; 
+    }
+
+    public void setKeepAliveTimeout(int timeout)
+    {
+        keepAliveTimeout = timeout;
     }
 
     /**
index 22ca60d..fb27ae5 100644 (file)
@@ -186,6 +186,12 @@ public class Http11Processor implements ActionHook {
      */
     protected int maxKeepAliveRequests = -1;
 
+    /**
+     * The number of seconds Tomcat will wait for a subsequent request
+     * before closing the connection.
+     */
+    protected int keepAliveTimeout = 15000;
+
 
     /**
      * SSL information.
@@ -621,6 +627,21 @@ public class Http11Processor implements ActionHook {
         return maxKeepAliveRequests;
     }
 
+    /**
+     * Set the Keep-Alive timeout.
+     */
+    public void setKeepAliveTimeout(int timeout) {
+        keepAliveTimeout = timeout;
+    }
+
+
+    /**
+     * Return the number Keep-Alive timeout.
+     */
+    public int getKeepAliveTimeout() {
+        return keepAliveTimeout;
+    }
+
 
     /**
      * Set the maximum size of a POST which will be buffered in SSL mode.
@@ -773,8 +794,13 @@ public class Http11Processor implements ActionHook {
 
             // Parsing the request header
             try {
-                if( !disableUploadTimeout && keptAlive && soTimeout > 0 ) {
-                    socket.setSoTimeout(soTimeout);
+                if (!disableUploadTimeout && keptAlive) {
+                    if (keepAliveTimeout > 0) {
+                        socket.setSoTimeout(keepAliveTimeout);
+                    }
+                    else if (soTimeout > 0) {
+                        socket.setSoTimeout(soTimeout);
+                    }
                 }
                 inputBuffer.parseRequestLine();
                 request.setStartTime(System.currentTimeMillis());
index a9dcaa5..881d332 100644 (file)
@@ -71,6 +71,7 @@ public class Http11Protocol
     public Http11Protocol() {
         setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
         setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
+        setKeepAliveTimeout(Constants.DEFAULT_KEEPALIVE_TIMEOUT);
         //setServerSoTimeout(Constants.DEFAULT_SERVER_SOCKET_TIMEOUT);
         setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
     }
@@ -285,6 +286,22 @@ public class Http11Protocol
     public int getMaxKeepAliveRequests() { return maxKeepAliveRequests; }
     public void setMaxKeepAliveRequests(int mkar) { maxKeepAliveRequests = mkar; }
 
+    // HTTP
+    /**
+     * The number of seconds Tomcat will wait for a subsequent request
+     * before closing the connection. The default is the same as for
+     * Apache HTTP Server (15 000 milliseconds).
+     */
+    protected int keepAliveTimeout = 15000;
+    public int getKeepAliveTimeout()
+    {
+        return keepAliveTimeout;
+    }
+    
+    public void setKeepAliveTimeout(int timeout)
+    {
+        keepAliveTimeout = timeout;
+    }
 
     // HTTP
     /**
@@ -584,6 +601,7 @@ public class Http11Protocol
                         new Http11Processor(protocol.maxHttpHeaderSize, protocol.endpoint);
                     processor.setAdapter(protocol.adapter);
                     processor.setMaxKeepAliveRequests(protocol.maxKeepAliveRequests);
+                    processor.setKeepAliveTimeout(protocol.keepAliveTimeout);
                     processor.setTimeout(protocol.timeout);
                     processor.setDisableUploadTimeout(protocol.disableUploadTimeout);
                     processor.setCompression(protocol.compression);
index 07fbf42..5320daa 100644 (file)
@@ -258,6 +258,21 @@ public class AprEndpoint {
 
 
     /**
+     * Keep-Alive timeout.
+     */
+    protected int keepAliveTimeout = 15000;
+    public int getKeepAliveTimeout()
+    {
+        return keepAliveTimeout;
+    }
+
+    public void setKeepAliveTimeout(int timeout)
+    {
+        keepAliveTimeout = timeout;
+    }
+
+
+    /**
      * Timeout on first request read before going to the poller, in ms.
      */
     protected int firstReadTimeout = -1;
@@ -1143,11 +1158,11 @@ public class AprEndpoint {
         protected void init() {
             pool = Pool.create(serverSockPool);
             int size = pollerSize / pollerThreadCount;
-            int timeout = soTimeout;
+            int timeout = keepAliveTimeout;
             if (comet) {
                 // FIXME: Find an appropriate timeout value, for now, "longer than usual"
                 // semms appropriate
-                timeout = soTimeout * 50;
+                timeout = keepAliveTimeout * 50;
             }
             serverPollset = allocatePoller(size, pool, timeout);
             if (serverPollset == 0 && size > 1024) {
@@ -1561,14 +1576,14 @@ public class AprEndpoint {
         protected void init() {
             pool = Pool.create(serverSockPool);
             int size = sendfileSize / sendfileThreadCount;
-            sendfilePollset = allocatePoller(size, pool, soTimeout);
+            sendfilePollset = allocatePoller(size, pool, keepAliveTimeout);
             if (sendfilePollset == 0 && size > 1024) {
                 size = 1024;
-                sendfilePollset = allocatePoller(size, pool, soTimeout);
+                sendfilePollset = allocatePoller(size, pool, keepAliveTimeout);
             }
             if (sendfilePollset == 0) {
                 size = 62;
-                sendfilePollset = allocatePoller(size, pool, soTimeout);
+                sendfilePollset = allocatePoller(size, pool, keepAliveTimeout);
             }
             desc = new long[size * 2];
             sendfileData = new HashMap<Long, SendfileData>(size);
index d61c49b..505863d 100644 (file)
@@ -218,6 +218,12 @@ with AJP enabled</li>
       presented.  The default value is infinite (i.e. no timeout).</p>
     </attribute>
 
+    <attribute name="keepAliveTimeout" required="false">
+      <p>The number of milliseconds this <strong>Connector</strong> will wait,
+       subsequent request before closing the connection.
+       The default value is infinite (i.e. no timeout).</p>
+    </attribute>
+
     <attribute name="minProcessors" required="false">
       <strong>deprecated</strong>
       <p>The minimum number of processors to start at initialization time.
index ddbcaa0..6196624 100644 (file)
       presented.  The default value is 60000 (i.e. 60 seconds).</p>
     </attribute>
 
+    <attribute name="keepAliveTimeout" required="false">
+      <p>The number of milliseconds this <strong>Connector</strong> will wait,
+       subsequent request before closing the connection.
+       The default value is 15000 (i.e. 15 seconds).</p>
+    </attribute>
+
     <attribute name="disableUploadTimeout" required="false">
       <p>This flag allows the servlet container to use a different, longer
       connection timeout while a servlet is being executed, which in the end