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

Reply via email to