Author: markt Date: Mon Jun 16 19:58:56 2014 New Revision: 1602984 URL: http://svn.apache.org/r1602984 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56620 More general fix for incorrect request start times.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1602956 Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Mon Jun 16 19:58:56 2014 @@ -991,12 +991,6 @@ public abstract class AbstractHttp11Proc response.setStatus(503); setErrorState(ErrorState.CLOSE_CLEAN, null); } else { - // Make sure that connectors that are non-blocking during - // header processing (NIO) only set the start time the first - // time a request is processed. - if (request.getStartTime() < 0) { - request.setStartTime(System.currentTimeMillis()); - } keptAlive = true; // Set this every time in case limit has been changed via JMX request.getMimeHeaders().setLimit(endpoint.getMaxHeaderCount()); Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java Mon Jun 16 19:58:56 2014 @@ -225,6 +225,10 @@ public abstract class AbstractInputBuffe } + /** + * Implementations are expected to call {@link Request#setStartTime(long)} + * as soon as the first byte is read from the request. + */ public abstract boolean parseRequestLine(boolean useAvailableDataOnly) throws IOException; Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon Jun 16 19:58:56 2014 @@ -224,10 +224,6 @@ public class Http11NioProcessor extends socketWrapper.setTimeout(endpoint.getKeepAliveTimeout()); } } else { - // Started to read request line. - if (request.getStartTime() < 0) { - request.setStartTime(System.currentTimeMillis()); - } if (endpoint.isPaused()) { // Partially processed the request so need to respond response.setStatus(503); Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Mon Jun 16 19:58:56 2014 @@ -134,9 +134,12 @@ public class InternalAprInputBuffer exte if (!fill()) throw new EOFException(sm.getString("iib.eof.error")); } - + // Set the start time once we start reading data (even if it is + // just skipping blank lines) + if (request.getStartTime() < 0) { + request.setStartTime(System.currentTimeMillis()); + } chr = buf[pos++]; - } while ((chr == Constants.CR) || (chr == Constants.LF)); pos--; Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java Mon Jun 16 19:58:56 2014 @@ -98,9 +98,12 @@ public class InternalInputBuffer extends if (!fill()) throw new EOFException(sm.getString("iib.eof.error")); } - + // Set the start time once we start reading data (even if it is + // just skipping blank lines) + if (request.getStartTime() < 0) { + request.setStartTime(System.currentTimeMillis()); + } chr = buf[pos++]; - } while ((chr == Constants.CR) || (chr == Constants.LF)); pos--; Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Mon Jun 16 19:58:56 2014 @@ -228,6 +228,11 @@ public class InternalNioInputBuffer exte return false; } } + // Set the start time once we start reading data (even if it is + // just skipping blank lines) + if (request.getStartTime() < 0) { + request.setStartTime(System.currentTimeMillis()); + } chr = buf[pos++]; } while ((chr == Constants.CR) || (chr == Constants.LF)); pos--; Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1602984&r1=1602983&r2=1602984&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Jun 16 19:58:56 2014 @@ -139,7 +139,8 @@ </fix> <fix> <bug>56620</bug>: Avoid bogus access log entries when pausing the NIO - HTTP connector. (markt) + HTTP connector and ensure that access log entries generated by error + conditions use the correct request start time. (markt) </fix> </changelog> </subsection> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org