Hello Henri, hello mod_jk-Developers, Am Di, den 27.01.2004 schrieb Henri Gomez um 18:00:
> > we are currently experiencing some problems with mod_jk with > > loadbalancing: > > > > (A) when a post-request fails while receiving data from tomcat, the > > loadbalancer tries to send the request to the other tomcat, but > > "forgets" the post body content (i.e. login and password submitted by > > the user). The size of the body content is only a few bytes (< 100), so > > it's not the "known" problem with bodies longer than 8k. > > > > (B) it seems that sometimes after a POST-failover body data from an > > old request is sent to the other tomcat when the first connection > > failed. This leads to a session mix-up & user mix-up! [...] > It used to works but it was before the content-header add-on code. > > This piece of is a nightmare, and I see no easier solution than copying > the HEAD+POST in temp buffer but I'd like to have Bill, Mladen and JFC > advices... I'd really like to use mod_jk open source software in our production environment, but I need to make sure it's strong enough for production. I need some advice on the two issues (as far as I can see there has been no commit on CVS and/or discussion results) * do you think the POST-recovery caused the session mix-up? * does our patch successfully eliminate the problem by disabling POST-recovery? The patch is attached. Thanks a lot, Alexander. -- 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]