You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/09/06 09:54:13 UTC

svn commit: r440649 - in /tomcat/connectors/trunk/jk/native/common: jk_ajp13.h jk_ajp_common.c

Author: mturk
Date: Wed Sep  6 00:54:12 2006
New Revision: 440649

URL: http://svn.apache.org/viewvc?view=rev&rev=440649
Log:
Differentiate client errors by splitting the
JK_CLIENT_ERROR to read and write errors.
We don't wish to log the client broken requests
as 400 if the client closes the connection before
receiving all the data.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp13.h
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp13.h?view=diff&rev=440649&r1=440648&r2=440649
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp13.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp13.h Wed Sep  6 00:54:12 2006
@@ -41,6 +41,9 @@
 #define JK_FATAL_ERROR              (-3)
 #define JK_CLIENT_ERROR             (-4)
 #define JK_SERVER_ERROR             (-5)
+#define JK_CLIENT_RD_ERROR          (-6)
+#define JK_CLIENT_WR_ERROR          (-7)
+
 #define AJP13_MAX_SEND_BODY_SZ      (DEF_BUFFER_SZ - 6)
 #define AJP13_DEF_TIMEOUT           (0) /* Idle timout for pooled connections */
 

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?view=diff&rev=440649&r1=440648&r2=440649
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Wed Sep  6 00:54:12 2006
@@ -1067,7 +1067,7 @@
         if (!s->read(s, buf + rdlen, len - rdlen, &this_time)) {
             /* Remote Client read failed. */
             JK_TRACE_EXIT(l);
-            return JK_CLIENT_ERROR;
+            return JK_CLIENT_RD_ERROR;
         }
 
         if (0 == this_time) {
@@ -1111,7 +1111,7 @@
                "Connection aborted or network problems",
                ae->worker->name);
         JK_TRACE_EXIT(l);
-        return JK_CLIENT_ERROR;
+        return JK_CLIENT_RD_ERROR;
     }
 
     if (!r->is_chunked) {
@@ -1125,7 +1125,7 @@
             jk_log(l, JK_LOG_INFO,
                    "Failed appending message length");
             JK_TRACE_EXIT(l);
-            return JK_CLIENT_ERROR;
+            return JK_CLIENT_RD_ERROR;
         }
     }
 
@@ -1333,7 +1333,7 @@
                 /* the browser stop sending data, no need to recover */
                 op->recoverable = JK_FALSE;
                 JK_TRACE_EXIT(l);
-                return JK_CLIENT_ERROR;
+                return JK_CLIENT_RD_ERROR;
             }
 
             /* If a RECOVERY buffer is available in LB mode, fill it */
@@ -1410,7 +1410,7 @@
                 jk_log(l, JK_LOG_INFO,
                        "Writing to client aborted or client network problems");
                 JK_TRACE_EXIT(l);
-                return JK_CLIENT_ERROR;
+                return JK_CLIENT_WR_ERROR;
             }
             if (r->flush && r->flush_packets)
                 r->flush(r);
@@ -1442,7 +1442,7 @@
                    "Reding from client aborted or client network problems");
 
             JK_TRACE_EXIT(l);
-            return JK_CLIENT_ERROR;
+            return JK_CLIENT_RD_ERROR;
         }
         break;
 
@@ -1636,16 +1636,21 @@
             JK_TRACE_EXIT(l);
             return JK_FALSE;
         }
-        else if (JK_CLIENT_ERROR == rc) {
+        else if (JK_CLIENT_RD_ERROR == rc) {
             /*
-             * Client has stop talking to us, so get out.
+             * Client has stop sending to us, so get out.
              * We assume this isn't our fault, so just a normal exit.
-             * In most (all?)  cases, the ajp13_endpoint::reuse will still be
-             * false here, so this will be functionally the same as an
-             * un-recoverable error.  We just won't log it as such.
              */
             JK_TRACE_EXIT(l);
-            return JK_CLIENT_ERROR;
+            return JK_CLIENT_RD_ERROR;
+        }
+        else if (JK_CLIENT_RD_ERROR == rc) {
+            /*
+             * Client has stop receiving to us, so get out.
+             * We assume this isn't our fault, so just a normal exit.
+             */
+            JK_TRACE_EXIT(l);
+            return JK_CLIENT_WR_ERROR;
         }
         else if (JK_SERVER_ERROR == rc) {
             /*
@@ -1766,7 +1771,7 @@
                 return JK_TRUE;
             }
 
-            if (err == JK_CLIENT_ERROR) {
+            if (err == JK_CLIENT_RD_ERROR) {
                 *is_error = JK_HTTP_BAD_REQUEST;
                 if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
                     /* Mark the endpoint for shutdown */
@@ -1774,7 +1779,22 @@
                 }
                 jk_log(l, JK_LOG_INFO,
                        "(%s) request failed, "
-                       "because of client error "
+                       "because of client read error "
+                       "without recovery in send loop attempt=%d",
+                       p->worker->name, i);
+                JK_TRACE_EXIT(l);
+                return JK_CLIENT_ERROR;
+            }
+            else if (err == JK_CLIENT_WR_ERROR) {
+                /* XXX: Is this correct to log this as 200? */
+                *is_error = JK_HTTP_OK;
+                if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
+                    /* Mark the endpoint for shutdown */
+                    p->reuse = JK_FALSE;
+                }
+                jk_log(l, JK_LOG_INFO,
+                       "(%s) request failed, "
+                       "because of client write error "
                        "without recovery in send loop attempt=%d",
                        p->worker->name, i);
                 JK_TRACE_EXIT(l);
@@ -1784,7 +1804,7 @@
                 *is_error = JK_HTTP_SERVER_ERROR;
                 jk_log(l, JK_LOG_INFO,
                        "(%s) request failed, "
-                       "because of client error "
+                       "because of server error "
                        "without recovery in send loop attempt=%d",
                        p->worker->name, i);
                 JK_TRACE_EXIT(l);
@@ -1815,7 +1835,7 @@
                 }
             }
         }
-        if (err == JK_CLIENT_ERROR) {
+        if (err == JK_CLIENT_RD_ERROR) {
             *is_error = JK_HTTP_BAD_REQUEST;
             if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
                 /* Mark the endpoint for shutdown */
@@ -1823,7 +1843,21 @@
             }
             jk_log(l, JK_LOG_INFO,
                    "(%s) sending request to tomcat failed, "
-                   "because of client error "
+                   "because of client read error "
+                   "without recovery in send loop attempt=%d",
+                   p->worker->name, i);
+            JK_TRACE_EXIT(l);
+            return JK_CLIENT_ERROR;
+        }
+        else if (err == JK_CLIENT_WR_ERROR) {
+            *is_error = JK_HTTP_OK;
+            if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
+                /* Mark the endpoint for shutdown */
+                p->reuse = JK_FALSE;
+            }
+            jk_log(l, JK_LOG_INFO,
+                   "(%s) sending request to tomcat failed, "
+                   "because of client write error "
                    "without recovery in send loop attempt=%d",
                    p->worker->name, i);
             JK_TRACE_EXIT(l);



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