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: [email protected]
For additional commands, e-mail: [email protected]