Author: mturk Date: Fri Sep 29 01:23:37 2006 New Revision: 451157 URL: http://svn.apache.org/viewvc?view=rev&rev=451157 Log: Introduce keepAliveTimeout to be able to separate the Keep-Alive and Socket timeout. The patch enables to have infinite socket timeouts while still having correct keep alive.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Constants.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Constants.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Processor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Constants.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Constants.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Constants.java Fri Sep 29 01:23:37 2006 @@ -34,6 +34,7 @@ public static final int DEFAULT_CONNECTION_TIMEOUT = 60000; public static final int DEFAULT_CONNECTION_UPLOAD_TIMEOUT = 300000; public static final int DEFAULT_SERVER_SOCKET_TIMEOUT = 0; + public static final int DEFAULT_KEEPALIVE_TIMEOUT = 15000; public static final int PROCESSOR_IDLE = 0; public static final int PROCESSOR_ACTIVE = 1; Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml Fri Sep 29 01:23:37 2006 @@ -93,6 +93,10 @@ description="Maximum number of Keep-Alive requests to honor per connection" type="int"/> + <attribute name="keepAliveTimeout" + description="The number of seconds Tomcat will wait for a subsequent request before closing the connection" + type="int"/> + <attribute name="maxPostSize" description="Maximum size in bytes of a POST which will be handled by the servlet API provided features" type="int"/> Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Fri Sep 29 01:23:37 2006 @@ -417,6 +417,15 @@ setAttribute("soTimeout", "" + i); } + public int getKeepAliveTimeout() { + return ep.getKeepAliveTimeout(); + } + + + public void setKeepAliveTimeout( int i ) { + ep.setKeepAliveTimeout(i); + setAttribute("keepAliveTimeout", "" + i); + } public void setRequiredSecret(String requiredSecret) { this.requiredSecret = requiredSecret; Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/ajp/Constants.java Fri Sep 29 01:23:37 2006 @@ -38,6 +38,7 @@ 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; Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Constants.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Constants.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Constants.java Fri Sep 29 01:23:37 2006 @@ -39,6 +39,7 @@ public static final int DEFAULT_CONNECTION_TIMEOUT = 60000; public static final int DEFAULT_CONNECTION_UPLOAD_TIMEOUT = 300000; public static final int DEFAULT_SERVER_SOCKET_TIMEOUT = 0; + public static final int DEFAULT_KEEPALIVE_TIMEOUT = 15000; public static final boolean DEFAULT_TCP_NO_DELAY = true; Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Fri Sep 29 01:23:37 2006 @@ -208,6 +208,11 @@ */ 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 ? @@ -643,6 +648,20 @@ 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. Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Fri Sep 29 01:23:37 2006 @@ -201,6 +201,7 @@ private int socketBuffer = 9000; private Adapter adapter; private Http11ConnectionHandler cHandler; + private int keepAliveTimeout = 15000; // 15 seconds as in Apache HTTPD server /** * Compression value. @@ -461,6 +462,14 @@ maxKeepAliveRequests = mkar; setAttribute("maxKeepAliveRequests", "" + mkar); } + + /** + * 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 int getKeepAliveTimeout() { return keepAliveTimeout; } + public void setKeepAliveTimeout(int timeout) { keepAliveTimeout = timeout; } /** * Return the Keep-Alive policy for the connection. Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Processor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Processor.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Sep 29 01:23:37 2006 @@ -185,6 +185,12 @@ */ 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. @@ -620,6 +626,21 @@ 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. @@ -778,8 +799,13 @@ // 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()); Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Fri Sep 29 01:23:37 2006 @@ -70,6 +70,7 @@ 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); } @@ -281,6 +282,16 @@ 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 /** @@ -580,6 +591,7 @@ 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); Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?view=diff&rev=451157&r1=451156&r2=451157 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Sep 29 01:23:37 2006 @@ -255,6 +255,13 @@ public int getSoTimeout() { return soTimeout; } public void setSoTimeout(int soTimeout) { this.soTimeout = soTimeout; } + /** + * 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. @@ -1148,11 +1155,11 @@ 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) { @@ -1566,14 +1573,14 @@ 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); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]