Author: markt Date: Fri Jul 8 10:45:19 2011 New Revision: 1144246 URL: http://svn.apache.org/viewvc?rev=1144246&view=rev Log: Fix regression in connector re-factoring that was too aggressive cleaning up AJP/BIO between requests triggering 400 entries in the access log
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProtocol.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Fri Jul 8 10:45:19 2011 @@ -494,7 +494,15 @@ public abstract class AbstractAjpProcess } - public void recycle() { + /** + * Recycle the processor, ready for the next request which may be on the + * same connection or a different connection. + * + * @param socketClosing Indicates if the socket is about to be closed + * allowing the processor to perform any additional + * clean-up that may be required + */ + public void recycle(boolean socketClosing) { asyncStateMachine.recycle(); // Recycle Request object Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Fri Jul 8 10:45:19 2011 @@ -219,7 +219,7 @@ public class AjpAprProcessor extends Abs request.updateCounters(); rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE); - recycle(); + recycle(false); } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); @@ -487,8 +487,8 @@ public class AjpAprProcessor extends Abs * Recycle the processor. */ @Override - public void recycle() { - super.recycle(); + public void recycle(boolean socketClosing) { + super.recycle(socketClosing); inputBuffer.clear(); inputBuffer.limit(0); Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Fri Jul 8 10:45:19 2011 @@ -165,12 +165,12 @@ public class AjpAprProtocol extends Abst } else if (state == SocketState.OPEN){ // In keep-alive but between requests. OK to recycle // processor. Continue to poll for the next request. - processor.recycle(); + processor.recycle(false); recycledProcessors.offer(processor); ((AprEndpoint)proto.endpoint).getPoller().add( socket.getSocket().longValue()); } else { - processor.recycle(); + processor.recycle(true); recycledProcessors.offer(processor); } return state; @@ -194,7 +194,7 @@ public class AjpAprProtocol extends Abst // less-than-verbose logs. log.error(sm.getString("ajpprotocol.proto.error"), e); } - processor.recycle(); + processor.recycle(true); recycledProcessors.offer(processor); return SocketState.CLOSED; } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Fri Jul 8 10:45:19 2011 @@ -127,14 +127,14 @@ public class AjpNioProcessor extends Abs } catch (IOException e) { error = true; } - recycle(); + recycle(true); continue; } else if(type != Constants.JK_AJP13_FORWARD_REQUEST) { // Usually the servlet didn't read the previous request body if(log.isDebugEnabled()) { log.debug("Unexpected message: "+type); } - recycle(); + recycle(false); continue; } request.setStartTime(System.currentTimeMillis()); @@ -216,7 +216,7 @@ public class AjpNioProcessor extends Abs socket.setTimeout(keepAliveTimeout); } - recycle(); + recycle(true); } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProtocol.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProtocol.java Fri Jul 8 10:45:19 2011 @@ -136,7 +136,7 @@ public class AjpNioProtocol extends Abst if (entry.getKey().getSocket().getIOChannel()==socket) { it.remove(); AjpNioProcessor result = entry.getValue(); - result.recycle(); + result.recycle(true); unregister(result); released = true; break; @@ -148,22 +148,22 @@ public class AjpNioProtocol extends Abst /** * Use this only if the processor is not available, otherwise use - * {@link #release(SocketWrapper, AjpNioProcessor)}. + * {@link #release(SocketWrapper, AjpNioProcessor, boolean)}. */ @Override public void release(SocketWrapper<NioChannel> socket) { AjpNioProcessor processor = connections.remove(socket); if (processor != null) { - processor.recycle(); + processor.recycle(true); recycledProcessors.offer(processor); } } public void release(SocketWrapper<NioChannel> socket, - AjpNioProcessor processor) { + AjpNioProcessor processor, boolean isSocketClosing) { connections.remove(socket); - processor.recycle(); + processor.recycle(isSocketClosing); recycledProcessors.offer(processor); } @@ -204,11 +204,11 @@ public class AjpNioProtocol extends Abst } else if (state == SocketState.OPEN){ // In keep-alive but between requests. OK to recycle // processor. Continue to poll for the next request. - release(socket, processor); + release(socket, processor, false); socket.getSocket().getPoller().add(socket.getSocket()); } else { // Connection closed. OK to recycle the processor. - release(socket, processor); + release(socket, processor, true); } return state; @@ -231,7 +231,7 @@ public class AjpNioProtocol extends Abst // less-than-verbose logs. log.error(sm.getString("ajpprotocol.proto.error"), e); } - release(socket, processor); + release(socket, processor, true); return SocketState.CLOSED; } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Fri Jul 8 10:45:19 2011 @@ -227,7 +227,7 @@ public class AjpProcessor extends Abstra request.updateCounters(); rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE); - recycle(); + recycle(false); } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); @@ -243,10 +243,12 @@ public class AjpProcessor extends Abstra } @Override - public void recycle() { - super.recycle(); - input = null; - output = null; + public void recycle(boolean socketClosing) { + super.recycle(socketClosing); + if (socketClosing) { + input = null; + output = null; + } } // ----------------------------------------------------- ActionHook Methods Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java?rev=1144246&r1=1144245&r2=1144246&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java Fri Jul 8 10:45:19 2011 @@ -152,8 +152,11 @@ public class AjpProtocol extends Abstrac if (state == SocketState.LONG) { connections.put(socket, processor); + } else if (state == SocketState.OPEN){ + processor.recycle(false); + recycledProcessors.offer(processor); } else { - processor.recycle(); + processor.recycle(true); recycledProcessors.offer(processor); } return state; @@ -176,7 +179,7 @@ public class AjpProtocol extends Abstrac // less-than-verbose logs. log.error(sm.getString("ajpprotocol.proto.error"), e); } - processor.recycle(); + processor.recycle(true); recycledProcessors.offer(processor); return SocketState.CLOSED; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org