Re: State of affairs for mod_jk 1.2.20

2006-11-27 Thread Jim Jagielski


On Nov 24, 2006, at 3:06 PM, Mladen Turk wrote:


Rainer Jung wrote:

In my opinion the only change is:
- old code: retries=2 means first try to close all conns and  
second try

with new connection
- new code: retries=2 means first try to close all conns and  
immediate

new conn, second try a real retry.



Right, and that is the problem.
With retries=1 the old code would in case of connect failure
go to the next worker in the lb, while in the new code it
would first try to reconnect.
Now, this is OK for sticky session, but if you have session
replication there is simply no need to try to reconnect,
because it will connect on the next election.

What I'm saying is that right now we would always reconnect,
and the user has no influence in that, while with default
retries=2 he can set retries=1 and have that option.
Of course there will be extra [info] lines in the log in that
case.



+1


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



Re: State of affairs for mod_jk 1.2.20

2006-11-24 Thread Rainer Jung
Hi Mladen,

Mladen Turk schrieb:
 Rainer Jung wrote:
 For those who want to test: I committed far the most part of what I
 planned to improve.
 
 Thanks Rainer, the patches you made are really great!
 I think we'll have a best ever mod_jk.

Thanks for the credits, I hope they work.

 However I still have doubts about you patch:
 
 @@ -1219,8 +1219,8 @@
  jk_log(l, JK_LOG_INFO,
 (%s) all endpoints are disconnected or dead,
 ae-worker-name);
 -JK_TRACE_EXIT(l);
 -return JK_FALSE;
 +jk_log(l, JK_LOG_INFO,
 +   Increase the backend idle connection timeout or
 the connection_pool_minsize);
 
 The patch you made is IMHO dubious.
 I agree it works for standard sittuations when backend
 Tomcat closes the connection, but it fails when the backend
 is dead or (the major problem) when the firewall closes the
 connection between them.
 With your patch we loose the option to have a session-free
 nodes. There is simply no chance to have a lb that will
 go to another node if the existing one fails.

OK, I'll think about that in the next hour and then comment. Four eyes
are much better than 2 ...

 
 Regards,
 Mladen.

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



Re: State of affairs for mod_jk 1.2.20

2006-11-24 Thread Rainer Jung
Hi Mladen,

I read our code as follows:

in any case where a function in the while loop does produce an error, we
close the connection afterwards:

- if jk_is_socket_connected() fails, we do it explicitely via
jk_close_socket()

- if ajp_handle_cping_cpong() fails, we don't go into
ajp_connection_tcp_send_message() and call ajp_next_connection(), which
as a side effect closes the old connection via jk_close_socket()

- if ajp_connection_tcp_send_message() fails, and we don't get a
JK_FATAL_ERROR, again the conn is closed in ajp_next_connection()

- if it returns with JK_FATAL_ERROR, we close explicitely with
jk_close_socket()

So a hanging tomcat, cut off connections by a firewall, or closed conns
by the remote side all behave the same (I assume the extreme case, that
all conns are concerned): we end the loop, and all conns have beend
closed and replaced by JK_INVALID_SOCKET.

No the question is: how to proceed? If we had known before, that no
connections are established we would have passed the wile loop and
directly tried to establish a new connection. The difference in our
situation is, that we know we had to close conns, but we don't know the
reason.

If we return directly, then the first try has been burned by
invalidating all established connections, and the second (re)try will
start from a clean, no connection state, by trying to connect. Both
tries will be handled inside the ajp code, no load balancer will know
about that. After the failure of the second try we go up the stack, and
if there's a load balancer it will try another worker. The load balancer
counts it's own retries totally independant of the ones from the ajp
workers.

In my opinion the only change is:

- old code: retries=2 means first try to close all conns and second try
with new connection
- new code: retries=2 means first try to close all conns and immediate
new conn, second try a real retry.

My concern is: if a user thinks he does not want a retry in the ajp
worker (especially if he uses a load balancer), then I find it a little
too fast to not connect once, if all established conns are broken.

Concerning load balancing: the patch does not really change the
interaction with an lb. It's only a question, after how man retries we
break out of the service method of the ajp worker. That's internal to
the ajp worker. It's code decides how early it fails and then the lb
decides how to proceed. The lb retries are counted totally independently
of the ajp retries.

Session free node: I expect maintenance will close the conns, if the min
size is 0. Concerning the code here: if the new connection also fails,
then it would have also failed during in the old code during the second
try. So I don't see a big difference.

But maybe I overlooked something.

I find this discussion helpful!

Regards,

Rainer

Mladen Turk schrieb:
 Rainer Jung wrote:
 For those who want to test: I committed far the most part of what I
 planned to improve.
 
 Thanks Rainer, the patches you made are really great!
 I think we'll have a best ever mod_jk.
 
 However I still have doubts about you patch:
 
 @@ -1219,8 +1219,8 @@
  jk_log(l, JK_LOG_INFO,
 (%s) all endpoints are disconnected or dead,
 ae-worker-name);
 -JK_TRACE_EXIT(l);
 -return JK_FALSE;
 +jk_log(l, JK_LOG_INFO,
 +   Increase the backend idle connection timeout or
 the connection_pool_minsize);
 
 The patch you made is IMHO dubious.
 I agree it works for standard sittuations when backend
 Tomcat closes the connection, but it fails when the backend
 is dead or (the major problem) when the firewall closes the
 connection between them.
 With your patch we loose the option to have a session-free
 nodes. There is simply no chance to have a lb that will
 go to another node if the existing one fails.
 
 Regards,
 Mladen.
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]

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



Re: State of affairs for mod_jk 1.2.20

2006-11-24 Thread Mladen Turk

Rainer Jung wrote:


In my opinion the only change is:

- old code: retries=2 means first try to close all conns and second try
with new connection
- new code: retries=2 means first try to close all conns and immediate
new conn, second try a real retry.



Right, and that is the problem.
With retries=1 the old code would in case of connect failure
go to the next worker in the lb, while in the new code it
would first try to reconnect.
Now, this is OK for sticky session, but if you have session
replication there is simply no need to try to reconnect,
because it will connect on the next election.

What I'm saying is that right now we would always reconnect,
and the user has no influence in that, while with default
retries=2 he can set retries=1 and have that option.
Of course there will be extra [info] lines in the log in that
case.

Regards,
Mladen.

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



Re: State of affairs for mod_jk 1.2.20

2006-11-24 Thread Rainer Jung
OK, convinced. I'll change that tomorrow and add a respective note to
the docs fpr ajp retries in relation to lb.

Mladen Turk schrieb:
 Rainer Jung wrote:

 In my opinion the only change is:

 - old code: retries=2 means first try to close all conns and second try
 with new connection
 - new code: retries=2 means first try to close all conns and immediate
 new conn, second try a real retry.

 
 Right, and that is the problem.
 With retries=1 the old code would in case of connect failure
 go to the next worker in the lb, while in the new code it
 would first try to reconnect.
 Now, this is OK for sticky session, but if you have session
 replication there is simply no need to try to reconnect,
 because it will connect on the next election.
 
 What I'm saying is that right now we would always reconnect,
 and the user has no influence in that, while with default
 retries=2 he can set retries=1 and have that option.
 Of course there will be extra [info] lines in the log in that
 case.
 
 Regards,
 Mladen.
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]

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



State of affairs for mod_jk 1.2.20

2006-11-23 Thread Rainer Jung
For those who want to test: I committed far the most part of what I 
planned to improve. The rest of the things, I want to work on (depending 
on time) concerns only much smaller code areas:


- checking consistency for logging/%R/NOTES concerning worker name 
versus jvmRoute

- XML and txt mime type enhancements in jk status
- 2 more notes for logging (busy+max_busy of the lb itself)
- improve envvar handling in apache wrt. duplicate configuration
- document max_packet_size
- write a doc page concerning mapping rules, uriworkermap etc.
- write a doc page about jk status

Regards,

Rainer

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