Am Di, den 10.02.2004 schrieb Henri Gomez um 15:52:

> To fix this serious bug we should modify the current service API.
> 
> We should store the POSTED datas in the jk_ws_service_t area and
> not in ajp_operation_t, as such the first worker will feed the POST
> datas in an area which will be available to the second one.
> 
> Aternate idea are of course more than welcome;

As I understand it mod_jk is "stable", almost "deprecated", and mod_jk2
is "the future". Therefore I suggest: 

   * no API change in mod_jk
   * mark the operation as unrecoverable when an error occurs after
     the headers have been sent to the tomcat, that is only fixing
     bugs and trying not to do big changes 
   * concentrate your efforts on mod_jk2 and give people a reason to 
     upgrade :)

Marking the operation as unrecoverable might also solve the other
(lb-)problem: when you shut down the first tomcat after it has already
sent some data to the client mod_jk forwards the request to the second
tomcat and appends the response of the second tomcat to the response of
the first tomcat. I'll deliver a sample jk.log soon. 

I have prepared a patch for 1.2.4/1.2.5, and I am happy to port it to
HEAD -- if someone checks that it leaves no loose ends.

Thanks for taking this serious.

Alex.

PS: this "empty POST" bug is not the explanation for the session mixup
(yet)? Any ideas on that one?
-- 
Alexander Schwartz ([EMAIL PROTECTED])
http://www.ahus1.de
--- jk_ajp_common.c.old	Fri Jan 23 16:26:12 2004
+++ jk_ajp_common.c	Fri Jan 23 16:28:02 2004
@@ -963,10 +963,16 @@
      * or Tomcat crashed. In any case we cannot recover this.
      */
 
+    // as+gj/20040123: we don't want to try the buggy POST recovery as it
+    // seems to repost buggy data 
+    // BUT: doesn't work!
+    // op->recoverable = JK_FALSE;
+
     jk_log(l, JK_LOG_DEBUG,
            "ajp_send_request 2: "
-           "request body to send %d - request body to resend %d\n", 
-           ae->left_bytes_to_send, jk_b_get_len(op->reply) - AJP_HEADER_LEN);
+           "request body to send %d - request body to resend %d/%d\n", 
+           ae->left_bytes_to_send, jk_b_get_len(op->reply) - AJP_HEADER_LEN,
+           jk_b_get_len(op->post) - AJP_HEADER_LEN);
 
     /*
      * POST recovery job is done here.
@@ -977,10 +983,18 @@
      * remote Tomcat
      */
     if (jk_b_get_len(op->post) > AJP_HEADER_LEN) {
-        if(!ajp_connection_tcp_send_message(ae, op->post, l)) {
-            jk_log(l, JK_LOG_ERROR, "Error resending request body\n");
-            return JK_FALSE;
-        }
+      // as+gj/20040123: seems to be buggy, doesn't fit the debug output
+      // above, customers complain about seeing wrong user's data when doing
+      // a login-POST
+      //  if(!ajp_connection_tcp_send_message(ae, op->post, l)) {
+      //      jk_log(l, JK_LOG_ERROR, "Error resending request body\n");
+      //      return JK_FALSE;
+      //  }
+      
+      // as+gj/20040123 recovery is disabled above shoudn't happen!
+      jk_log(l, JK_LOG_ERROR, "Shouldn't be here resending request body! (as+gj/20040123)\n");
+      op->recoverable = JK_FALSE;
+      return JK_FALSE;
     }
     else {
         /* We never sent any POST data and we check if we have to send at
@@ -1009,6 +1023,8 @@
             s->content_read = len;
             if (!ajp_connection_tcp_send_message(ae, op->post, l)) {
                 jk_log(l, JK_LOG_ERROR, "Error sending request body\n");
+                // as+gj/20040123
+                op->recoverable = JK_FALSE;
                 return JK_FALSE;
             }  
         }
@@ -1279,6 +1295,9 @@
                      * receiving upload data and we must consider that
                      * operation is no more recoverable
                      */
+                    // as+gj/20040123:
+                    // don't want to recover
+                    op->recoverable = JK_FALSE;
                     if (! op->recoverable) {
                         *is_recoverable_error = JK_FALSE;
                         jk_log(l, JK_LOG_ERROR,

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to