Author: markt
Date: Sun Jan 16 12:55:55 2011
New Revision: 1059548

URL: http://svn.apache.org/viewvc?rev=1059548&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50582
Refactor access logging so chunked encoding is not forced if bytes sent is 
logged

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java
    tomcat/trunk/java/org/apache/catalina/valves/JDBCAccessLogValve.java
    tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
    tomcat/trunk/webapps/docs/changelog.xml

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=1059548&r1=1059547&r2=1059548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Sun Jan 
16 12:55:55 2011
@@ -404,6 +404,9 @@ public class CoyoteAdapter implements Ad
                 async = true;
             } else if (!comet) {
                 response.finishResponse();
+                ((Context) request.getMappingData().context).logAccess(request,
+                        response,
+                        System.currentTimeMillis() - req.getStartTime(), 
false);
                 req.action(ActionCode.POST_REQUEST , null);
             }
 
@@ -435,9 +438,10 @@ public class CoyoteAdapter implements Ad
 
         Request request = (Request) req.getNote(ADAPTER_NOTES);
         Response response = (Response) res.getNote(ADAPTER_NOTES);
-
+        boolean create = false;
+        
         if (request == null) {
-
+            create = true;
             // Create objects
             request = connector.createRequest();
             request.setCoyoteRequest(req);
@@ -460,8 +464,10 @@ public class CoyoteAdapter implements Ad
         connector.getService().getContainer().logAccess(
                 request, response, time, true);
         
-        request.recycle();
-        response.recycle();
+        if (create) {
+            request.recycle();
+            response.recycle();
+        }
     }
     
     

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=1059548&r1=1059547&r2=1059548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Sun Jan 16 
12:55:55 2011
@@ -538,36 +538,14 @@ public class AccessLogValve extends Valv
     @Override
     public void invoke(Request request, Response response) throws IOException,
             ServletException {
-        if (getState().isAvailable() && getEnabled()) {                
-            final String t1Name = AccessLogValve.class.getName()+".t1";
-            // Pass this request on to the next valve in our pipeline
-            long t1 = System.currentTimeMillis();
-            boolean asyncdispatch = request.isAsyncDispatching();
-            if (!asyncdispatch) {
-                request.setAttribute(t1Name, Long.valueOf(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;
-
-            log(request,response, time);
-        } else
-            getNext().invoke(request, response);       
+        getNext().invoke(request, response);       
     }
 
     
     @Override
     public void log(Request request, Response response, long time) {
-        if (logElements == null || condition != null
+        if (!getState().isAvailable() || !getEnabled() ||
+                logElements == null || condition != null
                 && null != request.getRequest().getAttribute(condition)) {
             return;
         }
@@ -1057,7 +1035,9 @@ public class AccessLogValve extends Valv
         @Override
         public void addElement(StringBuilder buf, Date date, Request request,
                 Response response, long time) {
-            long length = response.getBytesWritten(true);
+            // Don't need to flush since trigger for log message is after the
+            // response has been committed
+            long length = response.getBytesWritten(false);
             if (length <= 0 && conversion) {
                 buf.append('-');
             } else {

Modified: tomcat/trunk/java/org/apache/catalina/valves/JDBCAccessLogValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/JDBCAccessLogValve.java?rev=1059548&r1=1059547&r2=1059548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/JDBCAccessLogValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/JDBCAccessLogValve.java Sun 
Jan 16 12:55:55 2011
@@ -436,17 +436,18 @@ public final class JDBCAccessLogValve ex
      * in a ServletException.
      */
     @Override
-    public void invoke(Request request, Response response) 
-        throws IOException, ServletException {
-        
+    public void invoke(Request request, Response response) throws IOException,
+            ServletException {
         getNext().invoke(request, response);
-
-        log (request, response, 0);
     }
 
 
     @Override
     public void log(Request request, Response response, long time) {
+        if (!getState().isAvailable()) {
+            return;
+        }
+
         final String EMPTY = "" ;
         
         String remoteHost;

Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java?rev=1059548&r1=1059547&r2=1059548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java Sun 
Jan 16 12:55:55 2011
@@ -289,7 +289,7 @@ public abstract class AbstractOutputBuff
         lastActiveFilter = -1;
         committed = false;
         finished = false;
-
+        byteCount = 0;
     }
     
     /**
@@ -315,7 +315,6 @@ public abstract class AbstractOutputBuff
         if (lastActiveFilter != -1)
             activeFilters[lastActiveFilter].end();
         finished = true;
-        byteCount = 0;
     }
     
     public abstract void sendAck() throws IOException;

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1059548&r1=1059547&r2=1059548&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sun Jan 16 12:55:55 2011
@@ -65,6 +65,10 @@
       <fix>
         Fix NPE in RemoteAddrFilter, RemoteHostFilter. (kkolinko)
       </fix>
+      <fix>
+        <bug>50582</bug>: Refactor access logging so chunked encoding is not
+        forced for all requests if bytes sent is logged. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



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

Reply via email to