Author: fhanik
Date: Sat Mar 27 01:50:13 2010
New Revision: 928120

URL: http://svn.apache.org/viewvc?rev=928120&view=rev
Log:
Add in some debug, what is causing some TCK failures is a request/response pair 
not being recycled properly

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/connector/Request.java
    tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
    tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
    tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Sat Mar 
27 01:50:13 2010
@@ -344,7 +344,7 @@ public class CoyoteAdapter implements Ad
         } finally {
             req.getRequestProcessor().setWorkerThreadName(null);
             // Recycle the wrapper request and response
-            if (!comet && !async) {
+            if (!success || (!comet && !async)) {
                 request.recycle();
                 response.recycle();
             } else {

Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Sat Mar 27 
01:50:13 2010
@@ -490,6 +490,7 @@ public class Request
         
         asyncSupported = null;
         if (asyncContext!=null) asyncContext.recycle();
+        asyncContext = null;
 
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java Sat Mar 27 
01:50:13 2010
@@ -66,18 +66,22 @@ public class AsyncContextImpl implements
     private Request request;
     
     public AsyncContextImpl(Request request) {
+        if (log.isDebugEnabled()) {
+            log.debug("AsyncContext 
created["+request.getRequestURI()+"?"+request.getQueryString()+"]", new 
DebugException());
+        }
         //TODO SERVLET3 - async
         this.request = request;
     }
 
     @Override
     public void complete() {
+        if (log.isDebugEnabled()) {
+            log.debug("AsyncContext Complete Called["+state.get()+"; 
"+request.getRequestURI()+"?"+request.getQueryString()+"]", new 
DebugException());
+        }
         if (state.get()==AsyncState.COMPLETING) {
             //do nothing
-        } else if (state.compareAndSet(AsyncState.STARTED, 
AsyncState.COMPLETING)) {
-                // TODO SERVLET3 - async
-                doInternalComplete(false);
-        } else if (state.compareAndSet(AsyncState.DISPATCHED, 
AsyncState.COMPLETING)) {
+        } else if (state.compareAndSet(AsyncState.DISPATCHED, 
AsyncState.COMPLETING) ||
+                   state.compareAndSet(AsyncState.STARTED, 
AsyncState.COMPLETING)) {
             // TODO SERVLET3 - async
             AtomicBoolean dispatched = new AtomicBoolean(false);
             
request.getCoyoteRequest().action(ActionCode.ACTION_ASYNC_COMPLETE,dispatched);
@@ -104,12 +108,16 @@ public class AsyncContextImpl implements
 
     @Override
     public void dispatch(ServletContext context, String path) {
+        if (log.isDebugEnabled()) {
+            log.debug("AsyncContext Dispatch Called["+state.get()+"; "+path+"; 
"+request.getRequestURI()+"?"+request.getQueryString()+"]", new 
DebugException());
+        }
+
         // TODO SERVLET3 - async
         if (state.compareAndSet(AsyncState.STARTED, AsyncState.DISPATCHING) ||
             state.compareAndSet(AsyncState.DISPATCHED, 
AsyncState.DISPATCHING)) {
 
             if (request.getAttribute(ASYNC_REQUEST_URI)==null) {
-                request.setAttribute(ASYNC_REQUEST_URI, 
request.getRequestURI());
+                request.setAttribute(ASYNC_REQUEST_URI, 
request.getRequestURI()+"?"+request.getQueryString());
                 request.setAttribute(ASYNC_CONTEXT_PATH, 
request.getContextPath());
                 request.setAttribute(ASYNC_SERVLET_PATH, 
request.getServletPath());
                 request.setAttribute(ASYNC_QUERY_STRING, 
request.getQueryString());
@@ -166,6 +174,10 @@ public class AsyncContextImpl implements
 
     @Override
     public void start(final Runnable run) {
+        if (log.isDebugEnabled()) {
+            log.debug("AsyncContext Start Called["+state.get()+"; 
"+request.getRequestURI()+"?"+request.getQueryString()+"]", new 
DebugException());
+        }
+
         if (state.compareAndSet(AsyncState.STARTED, AsyncState.DISPATCHING) ||
             state.compareAndSet(AsyncState.DISPATCHED, 
AsyncState.DISPATCHING)) {
             // TODO SERVLET3 - async
@@ -386,5 +398,5 @@ public class AsyncContextImpl implements
         this.servletResponse = response;
         event = new AsyncEvent(this, request, response); 
     }
-
+    public static class DebugException extends Exception {}
 }

Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Sat Mar 27 
01:50:13 2010
@@ -124,7 +124,7 @@ public class AccessLogValve extends Valv
 
     //------------------------------------------------------ Constructor
     public AccessLogValve() {
-        super(false);
+        super(true);
     }
 
     // ----------------------------------------------------- Instance Variables
@@ -543,13 +543,24 @@ public class AccessLogValve extends Valv
     @Override
     public void invoke(Request request, Response response) throws IOException,
             ServletException {
-
+        final String t1Name = AccessLogValve.class.getName()+".t1";
         if (getState().isAvailable() && getEnabled()) {                
             // Pass this request on to the next valve in our pipeline
             long t1 = System.currentTimeMillis();
+            boolean asyncdispatch = request.isAsyncDispatching();
+            if (!asyncdispatch) {
+                request.setAttribute(t1Name, new Long(t1));
+            }
     
             getNext().invoke(request, response);
     
+            //we're not done with the request
+            if (request.isAsyncDispatching()) {
+                return;
+            } else if (asyncdispatch && request.getAttribute(t1Name)!=null) {
+                t1 = ((Long)request.getAttribute(t1Name)).longValue();
+            }
+            
             long t2 = System.currentTimeMillis();
             long time = t2 - t1;
     

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=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Sat Mar 27 
01:50:13 2010
@@ -674,7 +674,7 @@ public class AjpProcessor implements Act
                 dispatch.set(true);
                 endpoint.processSocket(this.socket, SocketStatus.STOP);
             } else {
-                dispatch.set(true);
+                dispatch.set(false);
             }
         } else if (actionCode == ActionCode.ACTION_ASYNC_SETTIMEOUT) {
           //TODO SERVLET3 - async

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Sat Mar 
27 01:50:13 2010
@@ -778,7 +778,7 @@ public class Http11NioProcessor extends 
                 dispatch.set(true);
                 endpoint.processSocket(this.socket, SocketStatus.STOP, true);
             } else {
-                dispatch.set(true);
+                dispatch.set(false);
             }
         } else if (actionCode == ActionCode.ACTION_ASYNC_SETTIMEOUT) {
           //TODO SERVLET3 - async

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Sat Mar 27 
01:50:13 2010
@@ -619,7 +619,7 @@ public class Http11Processor extends Abs
                 dispatch.set(true);
                 endpoint.processSocket(this.socket, SocketStatus.STOP);
             } else {
-                dispatch.set(true);
+                dispatch.set(false);
             }
         } else if (actionCode == ActionCode.ACTION_ASYNC_SETTIMEOUT) {
           //TODO SERVLET3 - async

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=928120&r1=928119&r2=928120&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Sat Mar 27 
01:50:13 2010
@@ -242,6 +242,7 @@ public class Http11Protocol extends Abst
 
         public SocketState process(SocketWrapper<Socket> socket, SocketStatus 
status) {
             Http11Processor processor = connections.remove(socket);
+            boolean recycle = true;
             try {
                 if (processor == null) {
                     processor = recycledProcessors.poll();
@@ -262,6 +263,7 @@ public class Http11Protocol extends Abst
                 if (state == SocketState.LONG) {
                     connections.put(socket, processor);
                     socket.setAsync(true);
+                    recycle = false;
                 } else {
                     connections.remove(socket);
                     socket.setAsync(false);
@@ -291,8 +293,10 @@ public class Http11Protocol extends Abst
                 //       if(proto.adapter != null) proto.adapter.recycle();
                 //                processor.recycle();
 
-                processor.action(ActionCode.ACTION_STOP, null);
-                recycledProcessors.offer(processor);
+                if (recycle) {
+                    processor.action(ActionCode.ACTION_STOP, null);
+                    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