You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/12/18 15:13:18 UTC

svn commit: r1720789 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/connector/CoyoteAdapter.java test/org/apache/catalina/valves/TesterAccessLogValve.java

Author: markt
Date: Fri Dec 18 14:13:18 2015
New Revision: 1720789

URL: http://svn.apache.org/viewvc?rev=1720789&view=rev
Log:
Comet processing in 7.0.x is a little messier than in 8.0.x. Refactor the BZ 58702 patch to take account of that.

Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TesterAccessLogValve.java

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1720789&r1=1720788&r2=1720789&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Fri Dec 18 14:13:18 2015
@@ -319,6 +319,8 @@ public class CoyoteAdapter implements Ad
                         if (event(req, res, SocketStatus.OPEN_READ)) {
                             comet = true;
                             res.action(ActionCode.COMET_BEGIN, null);
+                        } else {
+                            return false;
                         }
                     } else {
                         comet = true;
@@ -331,8 +333,23 @@ public class CoyoteAdapter implements Ad
                 }
             }
             if (!request.isAsync() && !comet) {
-                request.finishRequest();
-                response.finishResponse();
+                try {
+                    request.finishRequest();
+                    response.finishResponse();
+                } finally {
+                    long time = 0;
+                    if (req.getStartTime() != -1) {
+                        time = System.currentTimeMillis() - req.getStartTime();
+                    }
+                    if (request.getMappingData().context != null) {
+                        ((Context) request.getMappingData().context).logAccess(
+                                request, response, time, false);
+                    } else {
+                        log(req, res, time);
+                    }
+
+                    req.action(ActionCode.POST_REQUEST , null);
+                }
             }
 
             // Check to see if the processor is in an error state. If it is,
@@ -350,22 +367,6 @@ public class CoyoteAdapter implements Ad
             success = false;
             log.error(sm.getString("coyoteAdapter.service"), t);
         } finally {
-            // Access logging
-            if (!request.isAsync() && !comet) {
-                long time = 0;
-                if (req.getStartTime() != -1) {
-                    time = System.currentTimeMillis() - req.getStartTime();
-                }
-                if (request.getMappingData().context != null) {
-                    ((Context) request.getMappingData().context).logAccess(
-                            request, response, time, false);
-                } else {
-                    log(req, res, time);
-                }
-
-                req.action(ActionCode.POST_REQUEST , null);
-            }
-
             req.getRequestProcessor().setWorkerThreadName(null);
             // Recycle the wrapper request and response
             if (!success || (!comet && !request.isAsync())) {
@@ -441,6 +442,8 @@ public class CoyoteAdapter implements Ad
                             if (event(req, res, SocketStatus.OPEN_READ)) {
                                 comet = true;
                                 res.action(ActionCode.COMET_BEGIN, null);
+                            } else {
+                                return;
                             }
                         } else {
                             comet = true;
@@ -458,27 +461,26 @@ public class CoyoteAdapter implements Ad
             if (asyncConImpl != null) {
                 async = true;
             } else if (!comet) {
-                request.finishRequest();
-                response.finishResponse();
+                try {
+                    request.finishRequest();
+                    response.finishResponse();
+                } finally {
+                    if (postParseSuccess) {
+                        // Log only if processing was invoked.
+                        // If postParseRequest() failed, it has already logged it.
+                        // If context is null this was the start of a comet request
+                        // that failed and has already been logged.
+                        ((Context) request.getMappingData().context).logAccess(
+                                request, response,
+                                System.currentTimeMillis() - req.getStartTime(),
+                                false);
+                    }
+                    req.action(ActionCode.POST_REQUEST , null);
+                }
             }
         } catch (IOException e) {
             // Ignore
         } finally {
-            // Access log
-            if (!async && !comet) {
-                if (postParseSuccess) {
-                    // Log only if processing was invoked.
-                    // If postParseRequest() failed, it has already logged it.
-                    // If context is null this was the start of a comet request
-                    // that failed and has already been logged.
-                    ((Context) request.getMappingData().context).logAccess(
-                            request, response,
-                            System.currentTimeMillis() - req.getStartTime(),
-                            false);
-                }
-                req.action(ActionCode.POST_REQUEST , null);
-            }
-
             req.getRequestProcessor().setWorkerThreadName(null);
             AtomicBoolean error = new AtomicBoolean(false);
             res.action(ActionCode.IS_ERROR, error);
@@ -494,7 +496,6 @@ public class CoyoteAdapter implements Ad
                 response.clearEncoders();
             }
         }
-
     }
 
 

Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TesterAccessLogValve.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TesterAccessLogValve.java?rev=1720789&r1=1720788&r2=1720789&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TesterAccessLogValve.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TesterAccessLogValve.java Fri Dec 18 14:13:18 2015
@@ -43,6 +43,7 @@ public class TesterAccessLogValve extend
 
     @Override
     public void log(Request request, Response response, long time) {
+        (new Exception("Do log")).printStackTrace();
         entries.add(new Entry(request.getRequestURI(), response.getStatus(),
                 time));
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org