Re: cvs commit: jakarta-tomcat-connectors/jk/xdocs menu.idx style.xsl.in

2002-09-10 Thread Bernd Koecke

Henri Gomez wrote:
> [EMAIL PROTECTED] wrote:
> 
>> jfclere 2002/09/09 08:00:58
>>
>>   Modified:jk/xdocs menu.idx style.xsl.in
>>   Log:
>>   Add code to allow a dummy  in menu.idx: To separte jk and 
>> jk2.
> 
> 
> Excellent, we just need now to pass the subpart name and will be ready ;)
> 
> I'm still waiting comments on jk load-balancing settings after the
> commited lb patches from May 2002 (Costin, Bern, Matthias)

I got your mail and sent it to you directly. Should I send it to the list too?

Bernd

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


-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]



msg32976/pgp0.pgp
Description: PGP signature


Re: local worker patch for JK1

2002-05-15 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> Hi,
> 
> there is  something that bothers me  in the patch Bernd  sent, that is
> the local_worker  property of  workers, I think  the concept  of local
> worker is linked  with that of load balancing worker,  and not to that
> of worker.  Nothing forbids  to have an  ajp13 worker in  several load
> balancing workers, if the local worker property is linked to the ajp13
> worker, the worker  will be considered local for  every load balancing
> worker it appears in which is something I think should be avoided.
> 
> Mathias.
> 

Sorry, but I asked for, how to handle this flag yesterday and I got no response. 
Costin said, that he'll wait for my patch, and I don't want to let him wait for 
days.

If we add a list to the lb_worker, how should this be handled? Lets say it is 
called 'local_workers'. Should the local workers be in the list of balanced 
workers too? If yes, I think this makes the config look a little bit unclean. If 
not, we have to change the validate function more than I want to, because it 
depends on having balanced workers. And with a second list it is possible to 
have only local workers.

By the way, with the same motivation we should ask about the lb_value. It is not 
possible to have one worker with different values in different lb_workers. But 
it may be that one worker is the most powerful in one group (lb_worker) and less 
powerful in another. Ok normaly the lb_values should be choosen in order to the 
power of all workers and not because of one group. :)

I build the patch for the described simple situation. When I understand jk2 
right, this would be the right choice for a more complex environment.

Which way should be implemented? We should find one position and implement it 
then. May be I was a little bit to fast this time :).

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATCH] for lb_worker in jk1 with local workers

2002-05-15 Thread Bernd Koecke

Hi,

here is the patch for lb_worker in jk1. I tested it on a testcluster and it 
worked for me.

It adds two config params:
'local_worker_only' on the lb_worker
'local_worker' on the balanced workers, e.g. an ajp13 worker

Example environment:
A cluster with two nodes (TC1+TC2), running apache+tomcat tandem on each node, a 
loadbalancer in front of the nodes.

Example conf of TC1:

workers.tomcat_home=
workers.java_home=$(JAVA_HOME)
ps=/
worker.list=router

worker.TC1.port=8009
worker.TC1.host=node1.domain.tld
worker.TC1.type=ajp13
worker.TC1.lbfactor=1
worker.TC1.local_worker=1

worker.TC2.port=8009
worker.TC2.host=node2.domain.tld
worker.TC2.type=ajp13
worker.TC2.lbfactor=1
worker.TC2.local_worker=0

worker.router.type=lb
worker.router.balanced_workers=TC1,TC2
worker.router.local_worker_only=1

The 'local_worker' flag on TC1 and TC2 tells the lb_worker which connections are 
going to the local worker. If local_worker is an int and is not 0 it is set to 
JK_TRUE and marked as local worker, JK_FALSE otherwise. If in minimum one worker 
is marked as local worker, lb_worker is in local worker mode. All local worker 
are moved to the beginning of the internal worker list in lb_worker during 
validation.

This means that if a request with a session id comes in it would be routed to 
the appropriate worker. If this worker is down it will be send to the first 
local worker which is not in error state.

If a request without a session comes in, it would be routed to the first local 
worker. If all local worker are in error state, then the 'local_worker_only' 
flag is important. If it was set to an int and this wasn't 0 it is set to 
JK_TRUE, JK_FALSE otherwise. With set to JK_TRUE, this request gets an error 
response. If set to JK_FALSE lb_worker tries to route the request to another 
balanced worker.

If one of the worker was in error state and has recovered nothing changes. The 
local worker will be check for requests without a session id (and with a session 
on himself) and the other worker will only be checked if a request with a 
session id of this worker comes in.

In this environment, with a load balancer in front, it is an error if the 
balancer sends a request without a session to an apache without a running local 
worker. And if the looad balancer determines that a node is down no other node 
is allowed to send a request without a session to it. This is necessary for me, 
because on a switched off node apache and tomcat can still be up and running, 
but they are in an old state and should only be asked for old sessions.

Defaults:
local_worker: 0
local_worker_only:0

Internals:
The local workers are at the binning of the worker list. Additionaly I don't 
change the lb_value for local workers, but because of the workers order this 
should not be necessary.

I didn't changed the name of the local_worker_only flag because it suits the 
name with local_worker. But the flags are defines in jk_util.c its easy to 
change them.

I hope its usefull, the patch was geenrated against cvs with diff -u.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


Index: jk_lb_worker.c
===
RCS file: /home/cvspublic/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,v
retrieving revision 1.9
diff -u -r1.9 jk_lb_worker.c
--- jk_lb_worker.c  3 May 2002 23:32:43 -   1.9
+++ jk_lb_worker.c  15 May 2002 08:10:50 -
@@ -84,6 +84,7 @@
 char*name;
 double  lb_factor;
 double  lb_value;
+int is_local_worker;
 int in_error_state;
 int in_recovering;
 time_t  error_time;
@@ -100,6 +101,8 @@
 
 char *name; 
 jk_worker_t worker;
+int  in_local_worker_mode;
+int  local_worker_only;
 };
 typedef struct lb_worker lb_worker_t;
 
@@ -270,28 +273,29 @@
 }
 
 for(i = 0 ; i < p->num_of_workers ; i++) {
-if(p->lb_workers[i].in_error_state) {
-if(!p->lb_workers[i].in_recovering) {
-time_t now = time(0);
-
-if((now - p->lb_workers[i].error_time) > WAIT_BEFORE_RECOVER) {
-
-p->lb_workers[i].in_recovering  = JK_TRUE;
-p->lb_workers[i].error_time = now;
+if (!p->in_local_worker_mode || p->lb_workers[i].is_local_worker || 
+!p->local_worker_only) {
+if(p->lb_workers[i].in_error_state) {
+if(!p->lb_workers[i].in_recovering) {
+time_t now = time(0);
+if((now - p->lb_workers[i].error_time) > WAIT_BEFORE_RECOVER) {
+p->lb_workers[i].in_recovering  = JK_TRUE;
+p->lb_workers[i].error_time = now;
+rc = &(p->lb_workers[i]);
+
+   

Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-15 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> On Tue, 14 May 2002, Bernd Koecke wrote:
> 
> 
>>Hi Costin,
>>
>>the new patch seems to work, but I'll test it more exactly tomorrow. Then I'll 
>>create the patches and the functional description.
>>
>>In short, the patched lb_worker uses an additinal flag on the other workers (e.g 
>>worker.ajp13.local_worker=1) to determine if it should be moved to the beginning 
>>of the balanced_workers. So we don't need to deal with two lists in lb_worker 
>>and the lb_value '0' has no special meaning. The flag for sending requests only 
>>to local workers is 'local_worker_only' on the lb_worker. More when the patch is 
>>tested and ready.
> 
> 
> Ok. I already commited part of the changes for jk2 - but my version is 
> called 'hwBalanceErr', on worker_lb.
> 
> If 0 normal selection of non-local workers takes place if all locals are 
> in error state. If non 0, we'll return the value as the error code - for 
> a front-end balancer to detect and stop forwarding requests for this 
> instance. 
> 
> I think that's the behavior you need - and it also allows customization
> for the returned error code.
> 

That sounds great, many thanks!

The patch for jk1 is on the way and I added some explanation how it works and 
about the two config flags.

Bernd


> Costin
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-14 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
[...]

> 
> I'll implement the same thing in jk2, but I wait your patch for jk1.
> 

Hi Costin,

the new patch seems to work, but I'll test it more exactly tomorrow. Then I'll 
create the patches and the functional description.

In short, the patched lb_worker uses an additinal flag on the other workers (e.g 
worker.ajp13.local_worker=1) to determine if it should be moved to the beginning 
of the balanced_workers. So we don't need to deal with two lists in lb_worker 
and the lb_value '0' has no special meaning. The flag for sending requests only 
to local workers is 'local_worker_only' on the lb_worker. More when the patch is 
tested and ready.

Bernd

> Costin
> 
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-14 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> On Tue, 14 May 2002, Bernd Koecke wrote:
> 
> 
>>The '0' as lb_value is needed to determine which are the main/local-workers. If 
>>we don't have this special value we need an additional config-flag with a list 
>>of the local/main-workers like in Mathias patch.
>>
>>Should I add an additional config-flag (I will take it from Mathias patch) or do 
>>we stay with the special '0' value?
> 
> 
> I think it would be a good idea, it'll make things cleaner.
> 
> 'local_worker' would be allways selected, and if 'main_worker_mode' ( or 
> maybe 'hw_lb_mode' ) no fallback will happen.
> 
> 
> 
>>The 'main_worker_mode' is not the same like the 'in_main_worker_mode' var in 
>>lb_worker struct. If 'main_worker_mode' flag is set to 'reject' in the 
>>workers.properties the reject var of lb_worker struct is set to JK_TRUE. The 
>>'in_main_worker_mode' var of lb_worker struct is set to JK_TRUE if there is in 
>>minimum one worker with '0' as lb_value.
> 
> 
> That's a bit confusing. Maybe some better variable names are needed.
> 
> 2 flags should be enough - 'local_worker' and 'local_worker_only' ( or 
> something that makes it clear that if the flag is set, no fallback will
> occur but an error is returned for the hw balancer ).

Ok, how should we handle the local_worker list? The current code depends on one 
worker list. And for requests with a session its easier to look into one list. 
Is it ok to have the balanced_workers and one ore more of these workers could be 
  in the local_worker list? Then we could leave must of the code in validate 
function untouched and after getting all the workers we go through the 
local_worker list, if any, and move the worker from this list at the beginning 
of the balanced_workers and mark them as local. Would this be ok? Oterwise we 
have to handle two lists and it would be possible to have only local workers and 
no balanced_workers. Then the lb_module makes no sense, but it is configurable 
and we have to deal with this. Another solution is to have two lists in config 
but only one in lb_worker. But then we have to rewrite most of the code in 
validate and handle memory etc. You know I'm not so experienced in C, so I would 
prefere the first suggestion :).

Bernd

> 
> I'll implement the same thing in jk2, but I wait your patch for jk1.
> 
> Costin
> 
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-13 Thread Bernd Koecke

GOMEZ Henri wrote:
>>The '0' as lb_value is needed to determine which are the 
>>main/local-workers. If 
>>we don't have this special value we need an additional 
>>config-flag with a list 
>>of the local/main-workers like in Mathias patch.
>>
>>Should I add an additional config-flag (I will take it from 
>>Mathias patch) or do 
>>we stay with the special '0' value?
> 
> 
> It will be very usefull to make a short documentation
> on latest lb work mode and configuration.
> 
> Like a descriptive mail to this list, I'll commit mod_jk
> document accordingly...
> 

A short description of my latest patch is in my mail from 6.May 18:23 CEST.

If we add a new conf-flag I will test it localy and send a detailed description 
with the patch. If we don't add a flag I'll send a more detailed description 
about the latest patch.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-13 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> On Mon, 13 May 2002, Bernd Koecke wrote:
> 
> 
>>Sorry, I must say it again, for my environment it is an error, if a _switched
>>off_ tomcat got a request without a sessionid or with a session from another 
>>node. Its not necessary that this tomact-apache tandem is
> 
> 
> In the current code ( in jk2 ), if a worker is in 'disabled' state it'll 
> only get requests with sessionid, as you need.
> 
> If it is not disabled, but has a higher level ( == distance ), it'll
> still not get any new requests unless all closer workers are in error
> state.
> 
> 
>>update and start them up again. If there are no local/main worker I need an 
>>error response and no routing to a switched off tomcat. Its possible that this 
>>happens once per day.
> 
> 
> Setting the non-local workers in disabled state should do that. 
> 
> 
> 
>>I know this might be a special environment. I spent some time in jk1 to
>>build a working patch. Than I started looking in jk2. I'm not a good C
> 
> 
> Your patch looks ok. Would it be possible to remove the use of '0' as 
> a special value, and keep only the main_worker_mode flag for that ?
> Also, what's the meaning of 'reject' flag ? 
> 

The '0' as lb_value is needed to determine which are the main/local-workers. If 
we don't have this special value we need an additional config-flag with a list 
of the local/main-workers like in Mathias patch.

Should I add an additional config-flag (I will take it from Mathias patch) or do 
we stay with the special '0' value?

The reject value of the 'main_worker_mode' flag is for the special behavior not 
to balance even if no main-worker is up. Without this flag you would send a 
request to a non main-worker if all main-workers are in error state. When the 
main-workers are only a preference it might be ok to send a request to a non 
main-worker and lose only the session but don't send an error response. I think 
this was what Mathias said. But I need an error response if the main-worker is down.

The 'main_worker_mode' is not the same like the 'in_main_worker_mode' var in 
lb_worker struct. If 'main_worker_mode' flag is set to 'reject' in the 
workers.properties the reject var of lb_worker struct is set to JK_TRUE. The 
'in_main_worker_mode' var of lb_worker struct is set to JK_TRUE if there is in 
minimum one worker with '0' as lb_value.

> Also it would be nice to get some documentation for the new settings.
> 

Thats no problem, I could write a patch for the HTML-page.

> Regarding jk2 - I just want to know if the current solution is ok or 
> what are still problems. For now the priority is getting the patch in jk1
> so it can be released in 4.0.4 final ( so today or early tommorow I would 
> like to close this issue ). 

This sounds pretty good, many thanks!

Bernd


> 
> Costin 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_worker_lb.c

2002-05-13 Thread Bernd Koecke

Mathias Herberts wrote:
 > [EMAIL PROTECTED] wrote:
 >
 >> costin  02/05/09 14:06:48
 >>
 >> Modified:jk/native2/common jk_worker_lb.c Log: That's the big one.
 >>
 >> Please review !
 >>
 >> It changes the handling of lb_value to int. I also cleaned up the logic so
 >> it's easier ( I hope ) to understand what's happening. "Levels" replace the
 >> 'local worker', I thing I got the logic straight for those.
 >>
 >> I started to add a 'introspection' data, to validate and better report the
 >> config.
 >>
 >> We use one table per level. At the moment the maximum number of workers is
 >> hardcoded ( to 255 ), we could make it dynamic but that would make things
 >> pretty complex when we add workers dynamically ( it won't work without a CS
 >> or atomic operations )
 >
 >
 > Hi Costin,
 >
 > I read your code throughly and found no problem in get_most_suitable_worker,
 > I think your approach to prioritizing workers is the best. What bernd and I
 > had done was mainly driven by the need to have a frontal load balancer detect
 > the failure of the local worker(s). Since my last patch and having read yours
 > I think I found a better way to make the load balancer detect failures.
 >
 > Configure all Apache instances so they see all Tomcat instances, assign a
 > higher priority to local workers on each Apache, therefore local workers will
 > be chosen first. On each Apache, the load balancing worker is called lb.
 > Another load balancing worker, balancing only the local workers, is called
 > hwlb. The hardware load balancer checks the health of the Apache servers
 > using a URI which is served by hwlb instead of lb, therefore if there are no
 > more local workers left alive, the requests the hardware load balancer
 > dispatches to the associated Apache before it can detect the local workers
 > failure will be rerouted to the other non local workers and the client will
 > only loose its session information, she will not get any errors. When the
 > hardware load balancer ends up detecting the local workers failure (because
 > the hwlb worker rejected the request due to the lack of available worker), it
 > will declare the Apache inactive and will only use the other ones.
 >
 > This setup solves my use cases at least, I don't know for Bernd's.

Sorry, I must say it again, for my environment it is an error, if a _switched
off_ tomcat got a request without a sessionid or with a session from another 
node. Its not necessary that this tomact-apache tandem is
shut down. We switch off a port on this node and than the balancer wouldn't send
a request to it. And than no mod_jk is allowed to send a request to it without a
session for this node. It is normal that some nodes are _switched off_. We need
this for a a graceful update. We switch off some nodes, wait till there are no 
active sessions (all timed out) and then we shutdown apache + tomcat, make an 
update and start them up again. If there are no local/main worker I need an 
error response and no routing to a switched off tomcat. Its possible that this 
happens once per day.

I know this might be a special environment. I spent some time in jk1 to
build a working patch. Than I started looking in jk2. I'm not a good C
developer, so I needed some time for looking into jk2. Now I think I understand
the internal structure. I don't want to send untested patches or patches which
build more problems than it solves. The last patch I sent for jk1 solved my
problem, I tested it here on a testcluster and I hope it broke no prior
functionality. But it will take some time till I could send a patch for jk2. My 
boss give me some deadlines for other projects, one is next Wednesday. I would 
be happy if jk2 make it possible to use local/main-worker with sticky sessions 
(need only one per node/mod_jk). And if all local/main-worker are down the 
request gets an error-response. I will do my best to install a jk2 on my test 
cluster and try to play around with it.

May be I misunderstood Mathias suggestion for jk2, than delete the whole mail 
:). I hope I could send a patch for jk2 or look into the new code shortly.

Again, I think its a very good idea to use ints for lb_value, set a maximum and 
correct the value if one reaches this upper bound. And its a good idea to make 
the local/main-worker a more general thing. For a cluster environment it is a 
nice feature :).

Thanks

Bernd

 >
 > There remains a related problem in jk_requtil in jk2_requtil_getCookieByName,
 > as I mentioned several months ago on the list, the cookie extraction does not
 > work for cookies whose format conforms to RFC 2169, that is the cookie value
 > is enclosed in double quotes. Such cookie format is used by lynx for example.
 

Re: Load balancing patch

2002-05-07 Thread Bernd Koecke

Hi Mathias,

a looked at your patch and I think there are two bugs:

1) You set in_recovering of a woker which is in error_state to JK_TRUE even if
you don't select him for handling the request. This should be moved into the
next if clause when the worker is choosen.

2) When a local/main worker goes down and was set to error_state it would never
be asked again. Because if the local/main worker was in error and the time for a
new test has come you set rc only to this worker if it is no local worker and
this will never be true. And because of this and 1) in_recovering == JK_TRUE, so
it is dead for ever.

Thats why I have a more complicated if-statement in my patch. When I check if
the worker is in error state and this is true, I have to check if I can take it
anyway. Because I can't reach the else part of the if anymore.

My test environment is like in the explanation of my patch:

I got two nodes with one apache and tomcat on each node. So I have only one
local_worker per node and the mode is reject. When I shutdown tomcat I got an
error. But after starting up tomcat again it is still unreachable.

Bernd

Mathias Herberts wrote:
> Here is  my patch to  the load balancing  code. I have tested  the jk1
> part but not the jk2. The behavior should be identical though.
> 
> The concept of local worker is introduced. Local workers form a subset
> of the  balanced workers,  those workers handle  the requests  with no
> session information or requests with session info but whose worker has
> failed.
> 
> The list of local workers is specified in the workers.properties files
> as follows:
> 
> worker.lb.balanced_workers=w1,w2,w3,w4,w5,w6
> worker.lb.local_workers=w4,w6
> 
> Internally the  module will  rearrange the workers'  list so  that the
> local workers appear first in the list. For the example above the list
> will be rearranged as:
> 
>  w4,w6,w3,w1,w5,w2
> 
> When a request comes in it is  either part of a session or not. If the
> request  is part  of  a session  then  the worker  having created  the
> session is selected  (according to the session route  appearing in the
> session  id). If  this worker  has failed,  the request  is considered
> sessionless.   For requests without  a session,  the workers'  list is
> scanned from the beginning, selecting the worker not in error with the
> lowest  lb_value.   When  the   last  local  worker  is  reached,  two
> alternatives  exist  depending  on   the  value  of  the  fault_action
> property.   If fault_action  is set  to reject  then if  a  worker was
> selected it is  returned as the most suitable  worker for the request,
> if no  worker was selected  so far, meaning  all local workers  are in
> error, a null  value is returned as the  most suitable worker, meaning
> the  request is  in  error. If  fault_action  is set  to balance,  the
> selection processs continues.
> 
> For jk1, if fault_action is set to balance, non local workers in error
> can be  selected to handle  the request. In  jk2 in error  workers are
> never selected.
> 
> The fault_action is specified as follows:
> 
> worker.lb.fault_action={reject|balance}
> 
> With my patch,  the lb_value or lb_factor needs not  to have a special
> value  to handle  local workers.  Thus  lb_value is  modified at  each
> request handled by the worker.
> 
> 
> Feedback is welcome, testing of jk2 needs to be done.
> 
> Mathias.
> 

[...]

-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: jk_lb_worker.c patch

2002-05-06 Thread Bernd Koecke

Hi Costin,

here is my patch for jk_lb_worker.c, jk_util.c and jk_util.h. It was diffed 
against the cvs.

How does it work?

1) A new config param for lb_worker exists (main_worker_mode). Two values are 
possible: reject and balance.

2) This results in two new flags in lb_worker struct. If there was in minimum 
one worker with lb_value of 0 the flag in_main_worker_mode is set to JK_TRUE. 
JK_False if there was none.

The second flag is reject. It is JK_TRUE if the config param above was set, 
JK_FALSE otherwise or if in_main_worker_mode is JK_FALSE;

Behavior:
If there was no worker with lb_value == 0 it should work as it used to.
All workers with lb_value == 0 will be moved at the beginning of the worker 
list. It is possible to have more than one such worker. So you could have a 
standby server if the first main tomcat goes down.

If a request with a session id comes in it will be routed to his tomcat. If that 
fails it will be routed to the main worker.

If a request without a session id comes in it will be routed to the first of the 
main workers if that fails it goes to the next main worker. If there are no main 
workers left the reject flag is important. If it is set the request gets an 
error. If it is not set the lb_worker trys to route it to one of the other workers.

All requests without a session id or with an id on a shutdowned node will only 
be routed to the main worker (reject == JK_TRUE). Its like a graceful shutdown, 
e.g. for node1. If the lb in front of the cluster didn't send a request without 
a session id to node 1 it will only get requests with a jvmRoute of TC1. After 
these sessions timed out, it could be updated, get a shutdown and startup. Even 
after startup it wouldn't get a request without a session. The lb in front of 
the cluster must do the first move and send the apache on node one a fresh request.

Example workers.properties of node one:

workers.tomcat_home=
workers.java_home=$(JAVA_HOME)
ps=/
worker.list=router

worker.TC1.port=8009
worker.TC1.host=node1.domain.tld
worker.TC1.type=ajp13
worker.TC1.lbfactor=0

worker.TC2.port=8009
worker.TC2.host=node2.domain.tld
worker.TC2.type=ajp13
worker.TC2.lbfactor=1

worker.router.type=lb
worker.router.balanced_workers=TC1,TC2
worker.router.main_worker_mode=reject

For node two the lbfactor of TC1 is 1 and TC2 is 0.

I didn't had a closer look at Mathias patch. It seems to be much shorter. We 
should take the best of both. This patch is only a suggestion. I'm not an 
experienced C-Programmer (I know my copy statements in validate are ugly, but 
I'm not very familiar with moving memory around :) ).

Bernd

[EMAIL PROTECTED] wrote:
> Bernd,
> 
> At this moment I believe we should add flags and stop using the '0' value
> in the config file.
> 
> Internally ( in the code ) - it doesn't matter, we can keep 0 or
> use the flag ( I prefer the second ).
> 
> I'm waiting for your patch - it seems there is another bug that must 
> be fixed before we can tag - but I hope we can finish all changes in
> the next few days.
> 
> 
> Costin
> 
> On Mon, 6 May 2002, Bernd Koecke wrote:
> 
> 
>>thanks for commiting my patch :). After thinking about it, I found the same 
>>problem like Mathias. It's a problem for my environment too. We have the same 
>>problem with shutdown and recovering here. I'm on the way of looking in jk2. The 
>>question for jk1 is, what want we do if the main worker fails because of an error?
>>
>>Because the normal intention of lb is to switch to another worker in such case. 
>>But for the special use of a main worker we don't want that (at least it is an 
>>error in my environment here :) ). My suggestion is to add an additional flag to 
>>the lb_worker struct where we hold the information that we have a main worker, 
>>e.g main_worker_mode. Because of this flag we send only requests with a session 
>>id to one of the other worker. And we could change the behavior after an error 
>>of an other worker and check his state only if we get a request with his session 
>>route. This would be easy if we set the main worker at the begining of the 
>>worker list and/or use the flag. But we need the flag if we want to use more the 
>>one main worker.
>>
>>But what should happen if the main worker is in error state? In my patch some 
>>weeks ago I added an additional flag which causes the module to reject a request 
>>if it comes in without a session id and the main worker is down. If this flag 
>>wasn't set or was not set to reject the module chooses one of the other worker. 
>>For our environment here rejecting the request is ok, because if a request 
>>without a session comes to a switched off node, we have a problem with our 
>>separated load balancer. This should never happe

Re: jk_lb_worker.c patch

2002-05-06 Thread Bernd Koecke

Hi Costin,

at the moment I'm testing my patch and it seems to work. I'll send it soon with 
an explanation what I did. It's not the same as Mathias did. I used the 0 value 
and one additional config flag which results in two flags in lb_worker struct.

But I think your suggestion for jk2 is the better way. Without magic 0 values 
etc. After we get the lb_worker stable it would be better to build the new stuff 
in jk2. With the structure of jk1 I think it is a little bit difficult to build 
the desired behavior.

Bernd

[EMAIL PROTECTED] wrote:
> Bernd,
> 
> At this moment I believe we should add flags and stop using the '0' value
> in the config file.
> 
> Internally ( in the code ) - it doesn't matter, we can keep 0 or
> use the flag ( I prefer the second ).
> 
> I'm waiting for your patch - it seems there is another bug that must 
> be fixed before we can tag - but I hope we can finish all changes in
> the next few days.
> 
> 
> Costin
> 
> On Mon, 6 May 2002, Bernd Koecke wrote:
> 
> 
>>thanks for commiting my patch :). After thinking about it, I found the same 
>>problem like Mathias. It's a problem for my environment too. We have the same 
>>problem with shutdown and recovering here. I'm on the way of looking in jk2. The 
>>question for jk1 is, what want we do if the main worker fails because of an error?
>>
>>Because the normal intention of lb is to switch to another worker in such case. 
>>But for the special use of a main worker we don't want that (at least it is an 
>>error in my environment here :) ). My suggestion is to add an additional flag to 
>>the lb_worker struct where we hold the information that we have a main worker, 
>>e.g main_worker_mode. Because of this flag we send only requests with a session 
>>id to one of the other worker. And we could change the behavior after an error 
>>of an other worker and check his state only if we get a request with his session 
>>route. This would be easy if we set the main worker at the begining of the 
>>worker list and/or use the flag. But we need the flag if we want to use more the 
>>one main worker.
>>
>>But what should happen if the main worker is in error state? In my patch some 
>>weeks ago I added an additional flag which causes the module to reject a request 
>>if it comes in without a session id and the main worker is down. If this flag 
>>wasn't set or was not set to reject the module chooses one of the other worker. 
>>For our environment here rejecting the request is ok, because if a request 
>>without a session comes to a switched off node, we have a problem with our 
>>separated load balancer. This should never happen. We could make this rejecting 
>>be the standard if we have a main worker, but with a separate flag it would be 
>>more flexible.
>>
>>I will build a patch against cvs to make my intention clearer.
>>
>>Bernd
>>
>>[EMAIL PROTECTED] wrote:
>>
>>>Hi Mathias,
>>>
>>>I think we understand your use case, it is not very uncommon.
>>>In fact, as I mentioned few times, it is the 'main' use
>>>case for Apache ( multi-process ) when using the JNI worker.
>>>In this case Apache acts as a 'natural' load-balancer, with 
>>>requests going to various processes ( more or less randomly ).
>>>As in your case, requests without a session should allways go
>>>to the worker that is in the same process.
>>>
>>>The main reason for using '0' for the "local" worker is that
>>>in jk2 I want to switch from float to int - there is no reason
>>>( AFAIK ) to do all the float computation, even a short int
>>>will be enough for the purpose of implementing a round-roubin
>>>with weitghs.
>>>
>>>BTW, one extension I'm trying to make is support for multiple
>>>local workers - I'm still thining on how to do that. This will
>>>cover the case of few big boxes, each with several tomcat 
>>>instances ( if you have many G of RAM and many processors, sometimes
>>>is better to run more VMs instead of a single large process ) 
>>>In this case you still want some remote tomcats, for failover,
>>>but most load should go to the local workers.
>>>
>>>For jk2 I already fixed the selection of the 'recovering' worker,
>>>after timeout the worker will go through normal selection instead
>>>of beeing automatically chosen.
>>>
>>>For jk1 - I'm waiting for patches :-) I wouldn't do a big change -
>>>the current fix seemed like a good one. 
>

Re: jk_lb_worker.c patch

2002-05-06 Thread Bernd Koecke
nce to the default ) - this is easy to fix
>>>>if it creates problems, but I don't see why it would be a
>>>>problem.
>>>>
>>>>If it is working, next request will be served normally by
>>>>the default. If not, it'll go back to error state.
>>>>
>>>>In jk2 I removed that - error workers are no longer
>>>>selected. But for jk1 I would rather leave the old
>>>>behavior intact.
>>>>
>>>>Note that the reason for choosing 0 ( in jk2 ) as
>>>>default is that I want to switch from float to ints,
>>>>I'm not convinced floats are good for performance
>>>>( or needed ).
>>>>
>>>>Again - I'm just learning and trying, if you have
>>>>any idea I would be happy to hear them, patches
>>>>are more than wellcome.
>>>>
>>>>Costin
>>>>
>>>>On Sat, 4 May 2002, Mathias Herberts wrote:
>>>>
>>>>
>>>>
>>>>
>>>>>Hi,  I  just  joined  the  Tomcat-dev  list  and  saw  your  patch  to
>>>>>jk_lb_worker.c (making it version 1.9).
>>>>>
>>>>>If I understand well your patch it offers the same behaviors as Paul's
>>>>>patch  but with  an opposite  semantic for  a lbfactor  of 0.0  in the
>>>>>worker's definition,  i.e. a  value of 0.0  now means ALWAYS  USE THIS
>>>>>WORKER FOR REQUESTS WITH NO  SESSIONS instead of NEVER USE THIS WORKER
>>>>>FOR REQUESTS WITH NO SESSIONS. This seems fine to me.
>>>>>
>>>>>What disturbs  me is  what is  happening when one  worker is  in error
>>>>>state  and not  yet recovering.  In get_most_suitable  worker,  such a
>>>>>worker will  be selected whatever  its lb_value, meaning  a recovering
>>>>>worker will  have priority over  one with a  lb_value of 0.0  and this
>>>>>seems to break the behavior we had achieved with your patch.
>>>>>
>>>>>Did I miss something or is this really a problem?
>>>>>
>>>>>Mathias.
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATCH] added handling of a main worker in jk_lb_worker, Re: PROPOSAL:mod_jk2: Group/Instance

2002-05-03 Thread Bernd Koecke

Hi Costin,

it wasn't difficult, so here is the new patch. The new (old) behavior is:
The main worker is defined by a lb_value of 0. This will never be changed in 
jk_lb_worker. The other workers can get a value greater than 0. If the value 
from config file is less than 0 it is multiplicated with -1.

Your are right this is a better solution. We can switch from doubles to int and 
we get the other worker balanced if the main worker is down.

Bernd

Bernd Koecke wrote:
> Hi Costin,
> 
> [EMAIL PROTECTED] wrote:
> 
>> Hi Bernd,
>>
>> First, many thanks for your help :-)
>>
>>
> 
> your welcome, its a lot of fun :)
> 
>>> No, I think not :). I checked it yesterday. With some additional log 
>>> statements in the validate function of jk_lb_worker.c you get the 
>>> value _inf_ for the lb_factor and lb_value (line 434-444). Because if 
>>> it would be set to 1, my config hadn't worked. Because I set the 
>>> local worker to 1 and the others to 0.
>>
>>
>>
>> I'll check again, and fix it if necesarry.
>>
>> I wrote some code in jk2 that seems to solve the problem, and I can
>> backport this to jk1 if it is correct.
>>
>> Probably this is my mistake - I remember the discussion and the patch
>> that was sent for this problem, and most likely I did something
>> wrong commiting it ( i.e. I did few changes trying to simplify it, and it
>> seems I 'simplified' too much ). But my memory still has the patch's 
>> logic
>> which seemed fine :-)
>>
>>
>>> This is possible, but then you must add a check if the value is 0. 
>>> Because without it you calc 1/0 with an int and this will give you an 
>>> error.
>>
>>
>>
>> Yes, of course. 0 will continue to mean 'default worker'.
>>
> 
> see below
> 
>> I'm not very comfortable with float calculations in the critical
>> path ( and in an area that is executed concurently !). The only problem
>> is what happens on overflows - the lb_value may become 0 ( or a small 
>> value ) and then the worker will take all the load.
>>
>>
>>> Thats not the whole story. Its right you will check the main worker 
>>> when its back again and use it only once. Because when the request 
>>> was successful handled rec->in_recovering is true (line 332 of 
>>> jk_lb_worker.c, service function). Than get_max_lb get the value 
>>> _inf_ from one of the other worker. Than the things happen which I 
>>> said in my prior mail.
>>
>>
>>
>>> That was it what I did in my sent patch, the additional documentation 
>>> was sent a few days later. But my additions to the lb_worker were a 
>>> little bit to complex. You are right we should get it when we use the 
>>> flag only on the main worker and change the behavior after a failure 
>>> for this worker. But we need the trick with 0/inf for the other 
>>> worker, because only with this we have the situation that the other 
>>> worker wouldn't be asked when there is no session and the main worker 
>>> is up.
>>
>>
>>
>>
>> Ok, can you send the patch again :-) ?
>> For going back to the main worker - if we let it with lb_value=0 at all
>> time ( i.e. we don't alter that at any time ), and only in_error_state 
>> is set on failure - then I believe the thing will work fine.
>>
>>
> 
> Thats the invers from the actual situation. So my patch from a few hours 
> earlier this day depends on the fact that the other worker get a 
> lb_value of 0 in the config file. This will be converted to _inf_ and 
> the main worker gets 1 and this  will be the minimal lb_value of the 
> balanced workers. If we want the possibility to switch to ints I could 
> send a new patch which handles 0 as a special value for the main worker.
> 
> Should I?
> 
> Bernd
> 
> 
>>
>>> I will try to build another patch and send it. I think it could be 
>>> possible without an additional flag.
>>
>>
>>
>> Great !
>>
>>
>>
>>> Another tought about this:
>>> When you use double and we fix the handling after an error, the main 
>>> worker would never reach _inf_. Because the lb_factor is < 1 if 
>>> lb_value wasn't 0. After choosing the worker this value is added to 
>>> the lb_value. But with a high value for lb_value the differenc 
>>> between two savable double numbers is greater than the lb_factor. But 
>>> this is only interessting in theory. I think in real world we will 
>>

Re: PROPOSAL: mod_jk2: Group/Instance

2002-05-03 Thread Bernd Koecke

Hi Costin,

[EMAIL PROTECTED] wrote:
> Hi Bernd,
> 
> First, many thanks for your help :-)
> 
> 

your welcome, its a lot of fun :)

>>No, I think not :). I checked it yesterday. With some additional log statements 
>>in the validate function of jk_lb_worker.c you get the value _inf_ for the 
>>lb_factor and lb_value (line 434-444). Because if it would be set to 1, my 
>>config hadn't worked. Because I set the local worker to 1 and the others to 0.
> 
> 
> I'll check again, and fix it if necesarry.
> 
> I wrote some code in jk2 that seems to solve the problem, and I can
> backport this to jk1 if it is correct.
> 
> Probably this is my mistake - I remember the discussion and the patch
> that was sent for this problem, and most likely I did something
> wrong commiting it ( i.e. I did few changes trying to simplify it, and it
> seems I 'simplified' too much ). But my memory still has the patch's logic
> which seemed fine :-)
> 
> 
>>This is possible, but then you must add a check if the value is 0. Because 
>>without it you calc 1/0 with an int and this will give you an error.
> 
> 
> Yes, of course. 0 will continue to mean 'default worker'.
>

see below

> I'm not very comfortable with float calculations in the critical
> path ( and in an area that is executed concurently !). The only problem
> is what happens on overflows - the lb_value may become 0 ( or a small 
> value ) and then the worker will take all the load. 
> 
> 
> 
>>Thats not the whole story. Its right you will check the main worker when its 
>>back again and use it only once. Because when the request was successful handled 
>>rec->in_recovering is true (line 332 of jk_lb_worker.c, service function). Than 
>>get_max_lb get the value _inf_ from one of the other worker. Than the things 
>>happen which I said in my prior mail.
> 
> 
>>That was it what I did in my sent patch, the additional documentation was sent a 
>>few days later. But my additions to the lb_worker were a little bit to complex. 
>>You are right we should get it when we use the flag only on the main worker and 
>>change the behavior after a failure for this worker. But we need the trick with 
>>0/inf for the other worker, because only with this we have the situation that 
>>the other worker wouldn't be asked when there is no session and the main worker 
>>is up.
> 
> 
> 
> Ok, can you send the patch again :-) ? 
> 
> For going back to the main worker - if we let it with lb_value=0 at all
> time ( i.e. we don't alter that at any time ), and only in_error_state 
> is set on failure - then I believe the thing will work fine.
> 
>

Thats the invers from the actual situation. So my patch from a few hours earlier 
this day depends on the fact that the other worker get a lb_value of 0 in the 
config file. This will be converted to _inf_ and the main worker gets 1 and this 
  will be the minimal lb_value of the balanced workers. If we want the 
possibility to switch to ints I could send a new patch which handles 0 as a 
special value for the main worker.

Should I?

Bernd


> 
>>I will try to build another patch and send it. I think it could be possible 
>>without an additional flag.
> 
> 
> Great !
> 
> 
> 
>>Another tought about this:
>>When you use double and we fix the handling after an error, the main worker 
>>would never reach _inf_. Because the lb_factor is < 1 if lb_value wasn't 0. 
>>After choosing the worker this value is added to the lb_value. But with a high 
>>value for lb_value the differenc between two savable double numbers is greater 
>>than the lb_factor. But this is only interessting in theory. I think in real 
>>world we will reboot apache before this will happen :).
> 
>  
> That may become a problem if we use ints.
> 
> Costin
> 
> 
> 
[...]


-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: [PROPOSAL] tag mod_jk 1.2.1

2002-05-03 Thread Bernd Koecke

GOMEZ Henri wrote:
>>+1
>>
>>Though I need this weekend to make sure Win32 versions are building
>>and running successfully.  Apache 1.3 and IIS seem to be okay now,
>>but I still need to check the others.
> 
> 
> I also want to known if the latests patches received on list
> about lb will be included or not...
> 

I would be happy if they could be included :), because I need this 
functionality, but it may be not so important for others. My last patch was only 
for jk1 :(. I don't want to patch jk2 if I don't know exactly what I'm doing.

Bernd

-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: PROPOSAL: mod_jk2: new lb values

2002-05-03 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> Based on the previous discussion:
> 
> - change lbfactor from float to int ( maybe rename it to avoid confusion)
> 

It would be less magic but you have to check if the value is 0.

> - The value will be from 1 to MAX ( 100 ? ).
> 
> - Smaller values will mean more work. The value '0' ( or a special 
> flag ? ) will mean the worker will be used allways ( as long as it is not 
> in_error state ). We can make sure the '0' is the first in the list, 
> and avoid looking for others.
> 
> -  A factor 2 will take 2 times fewer requests than factor 1, 3 will be 
> 1/3, etc. ( each worker uses a counter, and the counter is incremented on 
> each request with the factor value - that's how it works today to 
> implement the round roubin ).
> 
> -  When a worker reaches MAX, all workers will be reset to their
> original values and error state reset. ( that means we'll reset the
> error state based on number of requests, not time ) ( is this a good idea ?) 
> 
> - A value of MAX ( Or flag ? ) will mean the worker will take no 
> request, except those with a previous session id. That's the gracefull
> shutdown.
> 
> In addition, I'm in process of moving the lb properties to channel, 
> since that's what the user should configure in jk2. 
> 
> Costin

I think this is a mutch better aproach then the magic zero lb_value :). I could 
check it for jk1 and I hope I get time to look deeper in jk2 to test it there too.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATHC] jakarta-tomcat-connectors Re: PROPOSAL: mod_jk2: Group/Instance

2002-05-03 Thread Bernd Koecke

Hi Costin,

now here is my patch. It is very small and it works. And we don't need 
additional config flags. When the lb_value is read from the config file it is 
checked against zero. With this a flag in lb_worker is set so that the 
get_max_lb-function could decide if this worker should be used or not. When you 
set lb_value of the main or local worker to 1 and 0 for the others all works 
fine. When you switch off the main worker you will be routed to the first of the 
other worker. Thats not very balancing, but the load balancer in front of the 
cluster shouldn't send requestes to a node with a shutdowned tomcat. It is only 
for requests with sessions on this node and for the time between shutdown of 
tomcat and the recognition of this by the balancer.

When tomcat is up again it will take a little time, in maximum the value of 
WAIT_BEFORE_RECOVER and the worker will be choosen and because of the flag it 
wouldn't get _inf_ as his lb_value.

the patch was created by
cvs diff -u jk_lb_worker.c

Bernd

Bernd Koecke wrote:
> Hi Costin,
> 
> May be I checked out the wrong repository. I checked out 
> jakarta-tomcat-connectors with the 
> CVSROOT=:pserver:[EMAIL PROTECTED]:/home/cvspublic
> 
> Now to the details, see below.
> 
> [EMAIL PROTECTED] wrote:
> 
>> On Thu, 2 May 2002, Bernd Koecke wrote:
>>
>>
>>> misunderstood it. After you said that my patch is included a had a 
>>> closer look at mod_jk. I can't see anything of my code but I found 
>>> the special meaning of the zero lb_factor/lb_value. It seems that I 
>>> didn't understand it right at the first time. This could solve my 
>>> problem but after a closer look and some testing I found another 
>>> problem. When you set the lb_value in workers.properties to 1 for the 
>>> local tomcat and 0 for the others, you get the desired behavior. But 
>>> if you switch off the local tomcat for a short time you come into 
>>> trouble. The problem is the 0 for the other workers. The calculation 
>>> of lb_worker transforms the 0 to _inf_. Because 1/0 for a double is 
>>> _inf_. This is greater than any 
>>
>>
>>
>> I think there is a piece that checks for 0 and sets it to 
>> DEFAULT_VALUE (==1 ) before doing 1/lb. 
> 
> 
> No, I think not :). I checked it yesterday. With some additional log 
> statements in the validate function of jk_lb_worker.c you get the value 
> _inf_ for the lb_factor and lb_value (line 434-444). Because if it would 
> be set to 1, my config hadn't worked. Because I set the local worker to 
> 1 and the others to 0.
> 
>>
>> While looking at the code - I'm not very sure this whole float is needed,
>> I'll try to find a way to simplify it and use ints ( maybe 0..100 with 
>> some 'special' values for NEVER and ALLWAYS, or some additional flags ).
>>
> 
> This is possible, but then you must add a check if the value is 0. 
> Because without it you calc 1/0 with an int and this will give you an 
> error.
> 
>> But the way it works ( or at least how I understand it ) is that if 
>> the main worker fails, then we look at all workers in error state and 
>> try the one with the oldest error. And the 'main' worker will be tried 
>> again when the timeout expires.
>>
> 
> Thats not the whole story. Its right you will check the main worker when 
> its back again and use it only once. Because when the request was 
> successful handled rec->in_recovering is true (line 332 of 
> jk_lb_worker.c, service function). Than get_max_lb get the value _inf_ 
> from one of the other worker. Than the things happen which I said in my 
> prior mail.
> 
>> I haven't tested this too much, I just applied the patches ( that I 
>> understand :-), I'll add some more debugging for this process and 
>> maybe we can find a better solution.
>>
>> But this functionality is essential for the JNI worker and very important
>> in general - so I really want to find the best solution. If you have any
>> patch idea, let me know.
>>
>> To avoid further confusion and complexity in the lb-factor/value, I 
>> think we should add one more flag ( 'local_worker' ? ) and use it 
>> explicitely. Again, patches are wellcome - it's allways good to have 
>>  different ( and more ) eyes looking at the code.
> 
> 
> That was it what I did in my sent patch, the additional documentation 
> was sent a few days later. But my additions to the lb_worker were a 
> little bit to complex. You are right we should get it when we use the 
> flag only on the main worker and change the behavior after a failure for 
> this worker

Re: PROPOSAL: mod_jk2: Group/Instance

2002-05-03 Thread Bernd Koecke

Hi Costin,

May be I checked out the wrong repository. I checked out 
jakarta-tomcat-connectors with the 
CVSROOT=:pserver:[EMAIL PROTECTED]:/home/cvspublic

Now to the details, see below.

[EMAIL PROTECTED] wrote:
> On Thu, 2 May 2002, Bernd Koecke wrote:
> 
> 
>>misunderstood it. After you said that my patch is included a had a closer look 
>>at mod_jk. I can't see anything of my code but I found the special meaning of 
>>the zero lb_factor/lb_value. It seems that I didn't understand it right at the 
>>first time. This could solve my problem but after a closer look and some testing 
>>I found another problem. When you set the lb_value in workers.properties to 1 
>>for the local tomcat and 0 for the others, you get the desired behavior. But if 
>>you switch off the local tomcat for a short time you come into trouble. The 
>>problem is the 0 for the other workers. The calculation of lb_worker transforms 
>>the 0 to _inf_. Because 1/0 for a double is _inf_. This is greater than any 
> 
> 
> I think there is a piece that checks for 0 and sets it to DEFAULT_VALUE 
> (==1 ) before doing 1/lb. 

No, I think not :). I checked it yesterday. With some additional log statements 
in the validate function of jk_lb_worker.c you get the value _inf_ for the 
lb_factor and lb_value (line 434-444). Because if it would be set to 1, my 
config hadn't worked. Because I set the local worker to 1 and the others to 0.

> 
> While looking at the code - I'm not very sure this whole float is needed,
> I'll try to find a way to simplify it and use ints ( maybe 0..100 with 
> some 'special' values for NEVER and ALLWAYS, or some additional flags ).
> 

This is possible, but then you must add a check if the value is 0. Because 
without it you calc 1/0 with an int and this will give you an error.

> But the way it works ( or at least how I understand it ) is that if the 
> main worker fails, then we look at all workers in error state and try the 
> one with the oldest error. And the 'main' worker will be tried again when 
> the timeout expires.
> 

Thats not the whole story. Its right you will check the main worker when its 
back again and use it only once. Because when the request was successful handled 
rec->in_recovering is true (line 332 of jk_lb_worker.c, service function). Than 
get_max_lb get the value _inf_ from one of the other worker. Than the things 
happen which I said in my prior mail.

> I haven't tested this too much, I just applied the patches ( that I 
> understand :-), I'll add some more debugging for this process and maybe 
> we can find a better solution.
> 
> But this functionality is essential for the JNI worker and very important
> in general - so I really want to find the best solution. If you have any
> patch idea, let me know.
> 
> To avoid further confusion and complexity in the lb-factor/value, I 
> think we should add one more flag ( 'local_worker' ? ) and use it 
> explicitely. Again, patches are wellcome - it's allways good to have 
>  different ( and more ) eyes looking at the code. 
> 

That was it what I did in my sent patch, the additional documentation was sent a 
few days later. But my additions to the lb_worker were a little bit to complex. 
You are right we should get it when we use the flag only on the main worker and 
change the behavior after a failure for this worker. But we need the trick with 
0/inf for the other worker, because only with this we have the situation that 
the other worker wouldn't be asked when there is no session and the main worker 
is up.

I will try to build another patch and send it. I think it could be possible 
without an additional flag.

Another tought about this:
When you use double and we fix the handling after an error, the main worker 
would never reach _inf_. Because the lb_factor is < 1 if lb_value wasn't 0. 
After choosing the worker this value is added to the lb_value. But with a high 
value for lb_value the differenc between two savable double numbers is greater 
than the lb_factor. But this is only interessting in theory. I think in real 
world we will reboot apache before this will happen :).


Bernd

> ( that can go in both jk1, but I can't see a release of jk2 without this 
> functionality )
> 
> Costin
> 
> 
> 
>>other lb_value and greater than the lb_value of the local tomcat. But after a 
>>failure of the local tomcat he is in error_state. After some time its set to 
>>recovering and if the local tomcat is back again the function jk(2)_get_max_lb 
>>gets the highest lb_value. This is _inf_ from one of the other workers. The 
>>addition of a value to _inf_ is meaningless. You end up with an lb_value of 
>>_inf_ for the local worker. If this worker isn't the 

Re: PROPOSAL: mod_jk2: Group/Instance

2002-05-02 Thread Bernd Koecke

[EMAIL PROTECTED] wrote:
> On Thu, 2 May 2002, Amund Elstad wrote:
> 
> 
>>(1) all requests without a session are routed to a specific tomcat instance
>>(if that instance is working). 
> 
> 
> That has been added, and it should work in both jk1 and jk2 ( I don't 
> remember who sent the patch, but I remember adding it ). If it doesn't 
> work yet, is easy to fix.
> 

Sorry, may be I'm stupid, but how does it work? I looked at jk and jk2. My 
understanding is the following:

The worker which uses the jvm route is the lb_worker. The others don't use the 
SessionId extension. You could tweak this worker, but its buggy or I 
misunderstood it. After you said that my patch is included a had a closer look 
at mod_jk. I can't see anything of my code but I found the special meaning of 
the zero lb_factor/lb_value. It seems that I didn't understand it right at the 
first time. This could solve my problem but after a closer look and some testing 
I found another problem. When you set the lb_value in workers.properties to 1 
for the local tomcat and 0 for the others, you get the desired behavior. But if 
you switch off the local tomcat for a short time you come into trouble. The 
problem is the 0 for the other workers. The calculation of lb_worker transforms 
the 0 to _inf_. Because 1/0 for a double is _inf_. This is greater than any 
other lb_value and greater than the lb_value of the local tomcat. But after a 
failure of the local tomcat he is in error_state. After some time its set to 
recovering and if the local tomcat is back again the function jk(2)_get_max_lb 
gets the highest lb_value. This is _inf_ from one of the other workers. The 
addition of a value to _inf_ is meaningless. You end up with an lb_value of 
_inf_ for the local worker. If this worker isn't the first in the worker list, 
it will never be choosen again. Because his lb_value will never be less than 
another lb_value, because all the other workers have _inf_ as theire lb_values. 
So every request without a session will be routed to the first of the other 
tomcats.

The only way out is a restart of the local apache after tomcat is up and 
running. But I don't know when tomcat is finished with all his contexts and 
started the connectors.

I didn't looked very deep into jk2, but I found the same 
get_most_suitable_worker and get_max_lb functions. The jk2_get_max_lb function 
will always return _inf_. In your answer to some other mails you said, that 
workers could be removed. Do I understand it right, that if my local tomcat goes 
down his worker is removed from the list and after he is comming up again added 
to the worker list with reseted lb_value (only for mod_jk2)?

The next days I will look in the docu and code of jk2 and give it a try. May be 
all my problems gone away with the new module :).

Sorry if I ask stupid questions, but I want to make it working for our new cluster.

Thanks

Bernd

> This is essential for jk2's JNI worker, which fits perfectly this case
> ( you don't want to send via TCP when you have a tomcat instance in the 
> same process ).
> 
> 
> 
>>(2) Tomcat instances in standby or "soft shutdown" mode where they serve
>>requests bound by established sessions, and requests without a session only
>>if all non-standby instances have failed.
> 
> 
> That's what the SHM scoreboard is going to do ( among other things ). 
> You can register tomcat instances ( which will be added automatically ),
> or unregister - in which case no new requests ( except the old sessions )
> will go to the unregistered tomcat.
> 
> 
> Costin
> 
> 
>>[EMAIL PROTECTED] wrote:
>>
>>
>>>On Tue, 30 Apr 2002, Bernd Koecke wrote:
>>>
>>>
>>>>some weeks ago I send a patch for mod_jk for an only routing lb_worker. A
>>>
>>few 
>>
>>>>days later I sent the docu. Henry Gomez said, that it should be commited.
>>>
>>But it 
>>
>>>>I think it isn't in the repository. But its the same  with me here, to
>>>
>>mutch 
>>
>>>>work for to less time :).
>>>
>>>I think it is in mod_jk, I remember seeing the commit. 
>>>
>>>And I think I commited it in jk2 as well ( after some modifications ).
>>>
>>>
>>>>I need sticky sessions but no loadbalancing in the module. If a request
>>>
>>without 
>>
>>>>a session comes in, it should be routed to the _local_ tomcat.
>>>
>>>Well, there is another use-case with the exact same behavior - Apache2 
>>>with tomcat in JNI mode. All requests without session should be routed to 
>>>the _jni_ channel ( i.e. in-process, minimal overhead ).
>>>
>>>It&#

Re: PROPOSAL: mod_jk2: Group/Instance

2002-04-30 Thread Bernd Koecke

Hi Costin,

some weeks ago I send a patch for mod_jk for an only routing lb_worker. A few 
days later I sent the docu. Henry Gomez said, that it should be commited. But it 
I think it isn't in the repository. But its the same  with me here, to mutch 
work for to less time :).

Again an example of my environment:
Cluster with 4 nodes, tomcat and apache on every node.
One Loadbalancer in front of the cluster which does a simple round robbin.

I need sticky sessions but no loadbalancing in the module. If a request without 
a session comes in, it should be routed to the _local_ tomcat.

I think this could be possible with the associated instance of a channel (item 
7). Then I have to configure all four nodes for the same group. Because all 
nodes will serve the same webapps and associate the channel with this group. But 
for this I need a non balancing group. I don't see if the default behavior of a 
group is balancing and if this can be switched off. Is this right or do I miss 
something?

Thanks

Bernd

[EMAIL PROTECTED] wrote:
> One of the major goals of mod_jk2 is simpler configuration. 
> 
> This proposal will cover the 'workers'.
> 
> 1. The 'worker' name is deprecated. It refers to too many
> things in mod_jk, and causes too much confusion ( i.e. it
> is a 'handler', coresponds to a jvmRoute, a protocol, a
> channel ).
> 
> 2. We'll use the term 'channel' to define the connections 
> between jk and tomcat. Each channel will follow a standard 
> naming syntax:
>channel.socket:HOST:PORT
>channel.unix:/PATH
>channel.jni:jni
> 
> Altenatively, the local part can be used as a shortcut.
> Each channel will use Ajp13 protocol by default ( or whatever
> is specific to the transport, or overriden ).
> 
> 3. We'll use the term 'instance' ( XXX or a better name 
> if you can sugest one ) to refer to a single tomcat VM. 
> That's what will be used in the jvmRoute. A tomcat instance
> can be reached by multiple channels. 
> By default, each instance will have one socket channel and
> will be named by the local part ( i.e. HOST:port ). That's the
> name that'll identify the VM.
> 
> 4. We'll use the term 'group' to reffer to a set of tomcat
> 'instances' that share a number of applications. The default
> group will be called 'lb'.  One 'instance' can be part of 
> one or many groups. 
> 
> 5. Each URI will be associated with a 'group'. In what used to
> be: 
>   JkMount /examples ajp13
> the 'group' will replace ajp13. 
> As I said, the default group is called 'lb' and includes all
> tomcat instances that are defined. 
> For each application that is installed on all instances, the 'lb'
> group must be used.
> If you have a sophisticated setup - and an app is installed
> only on some instances, you can use names like "lb_examples", 
> and explicitely define what tomcat instances belong to the group.
> 
> 6. The webapps will be defined by a hierarchy of directories
> ( host/webapp_name ) ( see previous mail ). Each webapp
> is obviously mapped consistently to one group, which will be 
> defined inside the WEB-INF/jk2/map.properties. 
> 
> 7. Each channel will have an associated 'instance' ( it can't
>  go to 2 tomcats ) and groups. The lb configuration is 
> done automatically based on those attributes. The mappings 
> are done automatically based on the hierarchy. If no map.properties
> is found, the whole webapp will be forwarded to the default
> group ( the common case ).
> 
> I believe this model covers all current use cases. Please, please,
> send feedback and let me know if you can help ( implementation,
> documentation, testing ), but feedback is the first step.
> 
> Costin 
> 
> 
> 
> 
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATCH] jakarta-tomcat-connectors/jk/doc/Tomcat-Workers-HowTo.html

2002-04-05 Thread Bernd Koecke

Hi,

here is the docs patch for the previouse patch of lb-worker. The base file is 
the current version from cvs.

But someone should look at it with more experience in writing docs in English :)

Have a nice weekend!

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


--- Tomcat-Workers-HowTo.html.orig  Fri Apr  5 15:31:37 2002
+++ Tomcat-Workers-HowTo.html   Fri Apr  5 17:09:25 2002
@@ -371,6 +371,8 @@
  Identifying
  failed Tomcat workers, suspending requests to them and instead
  fall-backing on other workers managed by the lb worker.
+ Additional
+ support for a "local" worker from the set of balanced workers.
 
 
 The overall result is that workers managed by the same lb
@@ -378,6 +380,22 @@
 also fall-backed so a single Tomcat process death will not "kill" the
 entire site.
 
+Additional you could define a so called "local" worker. If a request
+comes in without a session id or without the jvm-route at the end of the session
+id it will be routed to the local worker.
+
+You could define what will happen if this local worker is unreachable. You
+could set the "fault_action" directive to "balance" or
+"reject". If it is set to "balance" the list of balanced
+workers will be searched to find another worker for this request. But without
+session replication, you would loose your session data, because you will send
+the request to a Tomcat process which doesn't know anything about your session.
+If set to "reject" the request will get an error. If you use this
+value you need an additonal load balancer in front of your cluster, because all
+requests without a session, which come to the lb-worker would go to the local
+worker, get possibly a session there and would go there for every request
+because of the third item on the above list.
+
 The following table specifies properties that the lb worker
 can accept:
 
@@ -406,7 +424,67 @@
   worker.loadbalancer.balanced_workers= local13, local12
   
  
+ 
+  
+   local_worker
+  
+  
+   One of the workers from the balanced_workers list.
+  
+  
+   worker.loadbalancer.local_worker=local13
+  
+ 
+ 
+  
+   fault_action
+  
+  
+
+ Value "balance" activates the normal load balancing if the
+ local worker is unreachable.
+ Value "reject" answers with an error if the local worker is
+ unreachable.
+
+Default is "balance"
+  
+  
+worker.loadbalancer.fault_action=reject
+  
+ 
 
+
+Example:
+
+The following is an example of the workers.properties file. Without the last
+two lines (local_worker, fault_action) all request will be load balanced.
+
+
+Note that you must use the name of the worker from the balanced_workers list in the
+corresponding Engine-Tag in your Tomact server.xml in the jvmRoute-Attribute.
+This value must be appended to all newly created session ids  by Tomcat, because
+the lb-worker needs this id appendix for routing the request to the right Tomcat
+server.
+
+
+
+worker.list=router
+
+worker.TC1.port=8007
+worker.TC1.host=sample1.some.domain
+worker.TC1.type=ajp13
+worker.TC1.lbfactor=1
+
+worker.TC2.port=8007
+worker.TC2.host=sample2.some.domain
+worker.TC2.type=ajp13
+worker.TC2.lbfactor=1
+
+worker.router.type=lb
+worker.router.balanced_workers=TC1,TC2
+worker.router.local_worker=TC1
+worker.router.fault_action=reject
+
 
 jni Worker properties
 



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


Re: [PATCH] jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,jk_util.c

2002-04-05 Thread Bernd Koecke

GOMEZ Henri wrote:
> Seems a good patch.
> 
> Should be commited.
> 
> BTW, Bernd could you make a little documentation which could
> be included in jk doc and add example ?
> 
> Excellent works ;)

Thanks, I'll have a look at the docs in detail and add some example. Should I 
sent these files to this list?

Bernd

> 
> -
> Henri Gomez ___[_]
> EMAIL : [EMAIL PROTECTED](. .) 
> PGP KEY : 697ECEDD...oOOo..(_)..oOOo...
> PGP Fingerprint : 9DF8 1EA8 ED53 2F39 DC9B 904A 364F 80E6 
> 
> 
> 
> 
>>-Original Message-
>>From: Bernd Koecke [mailto:[EMAIL PROTECTED]]
>>Sent: Friday, April 05, 2002 1:30 PM
>>To: [EMAIL PROTECTED]
>>Subject: [PATCH]
>>jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,jk_util.c
>>
>>
>>Hi,
>>
>>some days ago I sent a question for an only routing lb-worker. 
>>Costin asked for 
>>the patch and here it is.
>>
>>I added two config-directives for the lb-worker:
>>
>>local_worker
>>- this is the name of the worker which should get the request 
>>if there is no 
>>session or no jvmRoute.
>>
>>fault_action
>>- the possible values are 'balance' and 'reject'. Explanation follows.
>>
>>Behaviour of lb-worker:
>>a.) there is a jvmRoute and the corresponding node is ok:
>>-> The request goes to the corresponding node
>>
>>b.) there is no jvmRoute or the corresponding node didn't answered:
>>-> if a local_worker was given. this one will get the request.
>>-> if a local_worker was given, but it is in error state:
>>fault_action == reject: the request gets an error.
>>fault_action == balance: try to find another worker from 
>>the list of
>> balanced workers (c.).
>>-> if no local_worker was given, go directly to c.).
>>
>>c.) if no worker was found in a) and b) the normal balancing 
>>behaviour takes place.
>>
>>I looked at cvs-repopsitory and it seems that jk_lb_worker.c 
>>and jk_util.c have 
>>the same version (1.8, 1.12) like mine from 
>>jakarta-tomcat-connectors-4.0.2-src.tar.gz.
>>
>>I need the fault_action, because our load balancer should not 
>>route a request to 
>>a node without a working local tomcat. So it is an error if an 
>>unrouteable 
>>request arrives at a node without a working local tomcat. And 
>>it is also an 
>>error to route it to one of the other nodes, because sometimes 
>>we switch off one 
>>node only by telling the load balancer not to use it for 
>>requests. In this case 
>>the modules should use this node only for requests with a 
>>session on it and not 
>>for requests without a session. But for other use cases it 
>>might be useful if 
>>mod_jk tries to balance the request in case of a failure of 
>>the local tomcat.
>>
>>I hope it is useful. Sorry i haven't looked into jk2 at this 
>>time, but may be i 
>>get time to do it soon.
>>
>>Bernd
>>-- 
>>Dipl.-Inform. Bernd Koecke
>>UNIX-Entwicklung
>>Schlund+Partner AG
>>Fon: +49-721-91374-0
>>E-Mail: [EMAIL PROTECTED]
>>
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATCH] jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,jk_util.c

2002-04-05 Thread Bernd Koecke

Hi,

some days ago I sent a question for an only routing lb-worker. Costin asked for 
the patch and here it is.

I added two config-directives for the lb-worker:

local_worker
- this is the name of the worker which should get the request if there is no 
session or no jvmRoute.

fault_action
- the possible values are 'balance' and 'reject'. Explanation follows.

Behaviour of lb-worker:
a.) there is a jvmRoute and the corresponding node is ok:
 -> The request goes to the corresponding node

b.) there is no jvmRoute or the corresponding node didn't answered:
 -> if a local_worker was given. this one will get the request.
 -> if a local_worker was given, but it is in error state:
 fault_action == reject: the request gets an error.
 fault_action == balance: try to find another worker from the list of
  balanced workers (c.).
 -> if no local_worker was given, go directly to c.).

c.) if no worker was found in a) and b) the normal balancing behaviour takes place.

I looked at cvs-repopsitory and it seems that jk_lb_worker.c and jk_util.c have 
the same version (1.8, 1.12) like mine from 
jakarta-tomcat-connectors-4.0.2-src.tar.gz.

I need the fault_action, because our load balancer should not route a request to 
a node without a working local tomcat. So it is an error if an unrouteable 
request arrives at a node without a working local tomcat. And it is also an 
error to route it to one of the other nodes, because sometimes we switch off one 
node only by telling the load balancer not to use it for requests. In this case 
the modules should use this node only for requests with a session on it and not 
for requests without a session. But for other use cases it might be useful if 
mod_jk tries to balance the request in case of a failure of the local tomcat.

I hope it is useful. Sorry i haven't looked into jk2 at this time, but may be i 
get time to do it soon.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


--- jk_lb_worker.c.orig Thu Apr  4 13:20:00 2002
+++ jk_lb_worker.c  Fri Apr  5 11:03:09 2002
@@ -95,6 +95,9 @@
 worker_record_t *lb_workers;
 unsigned num_of_workers;
 
+worker_record_t *default_worker;
+unsigned reject_on_fault;
+
 jk_pool_t p;
 jk_pool_atom_t buf[TINY_POOL_SIZE];
 
@@ -269,6 +272,27 @@
 }
 }
 
+if (p->default_worker) {
+rc = p->default_worker;
+if (rc->in_error_state) {
+if (!rc->in_recovering) {
+time_t now = time(0);
+
+if ((now - rc->error_time) > WAIT_BEFORE_RECOVER) {
+rc->in_recovering = JK_TRUE;
+rc->error_time = now;
+} else {
+rc = NULL;
+}
+} else {
+rc = NULL;
+}
+}
+if (rc || p->reject_on_fault) {
+return rc;
+}
+}
+
 for(i = 0 ; i < p->num_of_workers ; i++) {
 if(p->lb_workers[i].in_error_state) {
 if(!p->lb_workers[i].in_recovering) {
@@ -321,6 +345,8 @@
 
 if(rec) {
 int is_recoverable = JK_FALSE;
+jk_log(l, JK_LOG_DEBUG, "In jk_lb_worker::service routing to worker 
+'%s'\n",
+rec->name);
 
 s->jvm_route = jk_pool_strdup(s->pool,  rec->name);
 
@@ -415,6 +441,22 @@
 lb_worker_t *p = pThis->worker_private;
 char **worker_names;
 unsigned num_of_workers;
+char *default_worker_name;
+unsigned reject_on_fault = JK_FALSE;
+
+if (jk_get_lb_default_worker_name(props, p->name, &default_worker_name)) {
+jk_log(l, JK_LOG_DEBUG,
+"In jk_lb_worker_t::validate found a local worker is %s\n",
+default_worker_name);
+jk_get_lb_fault_action(props, p->name, &reject_on_fault);
+} else {
+jk_log(l, JK_LOG_DEBUG,
+"In jk_lb_worker_t::validate didn't found a local worker\n");
+}
+p->reject_on_fault = reject_on_fault;
+jk_log(l, JK_LOG_DEBUG,
+"In jk_lb_worker_t::validate reject_on_fault is '%u'\n",
+p->reject_on_fault);
 
 if(jk_get_lb_worker_list(props,
  p->name,
@@ -449,6 +491,12 @@
  we,
  l) || !p->lb_workers[i].w) {
 break;
+}
+if (default_worker_name && 0 == strcmp(p->lb_workers[i].name, 
+default_worker_name)) {
+p->default_worker = &(p->lb_workers[i]);
+jk_log(l, JK_LOG_DEBUG,
+

Re: tomcat 4.0.3 + mod_jk

2002-03-22 Thread Bernd Koecke

GOMEZ Henri wrote:
>>Up to now i Worked only on jk from JTC, but if we get the same 
>>functionality from jk2 I could have a look at it. I thought 
>>that jk2 was 
>>for apache2. But I may misunderstound this.
> 
> 
> jk2 is the reworked jk, for ap 1.3/2.0, IIS/iPlanet to come
> 

ok, for which should we do it? Can i build and use jk2 or is it in an 
early development state?

-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: tomcat 4.0.3 + mod_jk

2002-03-22 Thread Bernd Koecke

GOMEZ Henri wrote:
>>Yes. Costin suggested to use a special lb-factor. I would use 
>>-1 for the 
>>lb-factor. But this wouldn't solve the problem if someone set 
>>more than 
>>one worker to this value. To use a new config tag for 
>>optionally setting 
>>a default worker would be a cleaner way. And it would be easier to 
>>handle a connection error while connecting to the local tomcat in the 
>>service method. Because if my local tomcat has problems I 
>>could fallback 
>>to the normal selection of a worker by lb-factors.
> 
> 
> will you works on jk2 or good old jk from JTC ?
> 

Up to now i Worked only on jk from JTC, but if we get the same 
functionality from jk2 I could have a look at it. I thought that jk2 was 
for apache2. But I may misunderstound this.


-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: tomcat 4.0.3 + mod_jk

2002-03-22 Thread Bernd Koecke

GOMEZ Henri wrote:
>>>>yes, I know. But when I come in without a session the function 
>>>>get_most_suitable_worker in jk_lb_worker.c will find a 
>>>
>>worker by using 
>>
>>>>the lb-factor and do weighted round robin. And at this 
>>>
>>position I would 
>>
>>>>like to switch off the load-balancing and select the worker which is 
>>>>connected to tomcat on the same node. 
>>>
> 
> let's resume :
> 
> you have a tandem apache/tomcat by machine.
> apache could use also others tomcat from a LB farm.
> 
> when you've got no session you want to use the local tomcat 
> instead of one grabbed from lb farm. 
> 
> so you propose to add a 'DEFAULT' worker in LB which will bypass
> the LB settings when no session is present ?
> 

Yes. Costin suggested to use a special lb-factor. I would use -1 for the 
lb-factor. But this wouldn't solve the problem if someone set more than 
one worker to this value. To use a new config tag for optionally setting 
a default worker would be a cleaner way. And it would be easier to 
handle a connection error while connecting to the local tomcat in the 
service method. Because if my local tomcat has problems I could fallback 
to the normal selection of a worker by lb-factors.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: tomcat 4.0.3 + mod_jk

2002-03-21 Thread Bernd Koecke

ok, I will patch worker_lb. But it will take a few days. To mutch work 
and to less time :).

Bernd

[EMAIL PROTECTED] wrote:
> This also solves another problem - Apache2.0+JNI worker. It's exactly the 
> same, it acts similary with a load balancer ( multiple processes listening 
> on the same port ), and we want the jni worker to take the load if no 
> session. 
> 
> Wouldn't be simpler if you just patch worker_lb ? Say if a worker has a 
> very high factor ( or special flag ) use it allways. 
> 
> My thinking for jk2 was that the session stickiness should go in front of 
> everything, and be enabled by default, independent of lb.
> 
> 
> Send the patch please ( if you can just make a smaller change in lb it 
> would be better IMHO )
> 
> Costin
> 
> 
> 
> On Thu, 21 Mar 2002, Bernd Koecke wrote:
> 
> 
>>yes, I know. But when I come in without a session the function 
>>get_most_suitable_worker in jk_lb_worker.c will find a worker by using 
>>the lb-factor and do weighted round robin. And at this position I would 
>>like to switch off the load-balancing and select the worker which is 
>>connected to tomcat on the same node. Because we have a loadbalancer in 
>>front of our cluster but it can't handle the sessions. So we need the 
>>routing of mod_jk for sticky sessions, but the loadbalancing would 
>>indefer with our loadbalancer.
>>
>>With mod_jserv we did it with a little trick. The routing config and the 
>>nodeset for loadbalancing were separated. For routing we told mod_jserv 
>>all the nodes in the cluster, but for loadbalancing we build a nodeset 
>>with only the local node in it. A little perl script build the conffiles 
>>suitable for the nodes.
>>
>>But mod_jserv can only work with ajp12 and we would like to use the 
>>advanced features of ajp13.
>>
>>For mod_jk of tomcat 3.2.x I build an additional worker which did only 
>>the routing. And I added a new config command for declaring the local 
>>connected worker. But it is a little bit laborious to add this every 
>>time when the connectors change.
>>
>>Id would be nice if this feature was contained in mod_jk. I could do it 
>>and send the additional worker to the list/project.
>>
>>Thanks
>>
>>Bernd
>>
>>GOMEZ Henri wrote:
>>
>>>in mod_jk, when a session is created the following requests
>>>will allways go to the same tomcat.
>>>
>>>IBM call it Session Affinity ;)
>>>
>>>
>>>
>>>>Hi,
>>>>
>>>>is it possible to use only the session routing of mod_jk without load
>>>>balancing?
>>>>
>>>>Because we have a standalone loadbalancer in front of our cluster. In 
>>>>the past we used mod_jserv with ApacheJServ. But now we want to switch 
>>>>to tomcat. On every node should run an apache and tomcat, connected to 
>>>>each other with mod_jk. We need the routing between the nodes for 
>>>>established sessions, but a request without a session should be routed 
>>>>by mod_jk to the tomcat on the same node.
>>>>
>>>>I hope I could reach someone of the mod_jk developers. Sending this
>>>>question to the user list wasn't successful.
>>>>
>>>>Thanks
>>>>
>>>>Bernd
>>>
>>[...]
>>
>>
>>
> 
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 



-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: tomcat 4.0.3 + mod_jk

2002-03-21 Thread Bernd Koecke

yes, I know. But when I come in without a session the function 
get_most_suitable_worker in jk_lb_worker.c will find a worker by using 
the lb-factor and do weighted round robin. And at this position I would 
like to switch off the load-balancing and select the worker which is 
connected to tomcat on the same node. Because we have a loadbalancer in 
front of our cluster but it can't handle the sessions. So we need the 
routing of mod_jk for sticky sessions, but the loadbalancing would 
indefer with our loadbalancer.

With mod_jserv we did it with a little trick. The routing config and the 
nodeset for loadbalancing were separated. For routing we told mod_jserv 
all the nodes in the cluster, but for loadbalancing we build a nodeset 
with only the local node in it. A little perl script build the conffiles 
suitable for the nodes.

But mod_jserv can only work with ajp12 and we would like to use the 
advanced features of ajp13.

For mod_jk of tomcat 3.2.x I build an additional worker which did only 
the routing. And I added a new config command for declaring the local 
connected worker. But it is a little bit laborious to add this every 
time when the connectors change.

Id would be nice if this feature was contained in mod_jk. I could do it 
and send the additional worker to the list/project.

Thanks

Bernd

GOMEZ Henri wrote:
> in mod_jk, when a session is created the following requests
> will allways go to the same tomcat.
> 
> IBM call it Session Affinity ;)
> 
> 
>>Hi,
>>
>>is it possible to use only the session routing of mod_jk without load
>>balancing?
>>
>>Because we have a standalone loadbalancer in front of our cluster. In 
>>the past we used mod_jserv with ApacheJServ. But now we want to switch 
>>to tomcat. On every node should run an apache and tomcat, connected to 
>>each other with mod_jk. We need the routing between the nodes for 
>>established sessions, but a request without a session should be routed 
>>by mod_jk to the tomcat on the same node.
>>
>>I hope I could reach someone of the mod_jk developers. Sending this
>>question to the user list wasn't successful.
>>
>>Thanks
>>
>>Bernd
[...]


-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




tomcat 4.0.3 + mod_jk

2002-03-20 Thread Bernd Koecke

Hi,

is it possible to use only the session routing of mod_jk without load
balancing?

Because we have a standalone loadbalancer in front of our cluster. In 
the past we used mod_jserv with ApacheJServ. But now we want to switch 
to tomcat. On every node should run an apache and tomcat, connected to 
each other with mod_jk. We need the routing between the nodes for 
established sessions, but a request without a session should be routed 
by mod_jk to the tomcat on the same node.

I hope I could reach someone of the mod_jk developers. Sending this
question to the user list wasn't successful.

Thanks

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




Re: new photos from my party!

2002-01-28 Thread Bernd Koecke

Hi all,

I don't know why this Mail comes to the list. I'm working with a 
Linux-System and Mozilla as Mail-Reader.

 > [EMAIL PROTECTED] wrote:

I can't see how my system could send this mail. Is it possible that this 
mail is in the inbound-foulder of someone else? But it is the 
autogenerated mail response for my last subscribtion after X-Mas 
vacation. I'm sorry, if I be the origin of this mails. But I don't know 
how to stop it. Could someone send me in the right direction?

Bernd

-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]


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




[PATCH Suggestion] tc-3.2.3 Little bug in ContextAdmin.java

2001-07-18 Thread Bernd Koecke

Hi,

I got a request for the diff of ContextAdmin.java. 
Subject of my original posting was: tc-3.2.2/3.2.3 Little Bug in ContextAdmin.java
Its not to long, so I send it to the list. The orig-class is the one shipped with 
tomcat-3.2.3.

But again, it solves the problem only for Java2-Systems.

I hope it's useful

Bernd

--- ContextAdmin.java.orig  Wed Jul 18 15:25:25 2001
+++ ContextAdmin.java   Wed Jul 18 15:25:53 2001
@@ -2,6 +2,7 @@
 import java.util.Enumeration;
 import java.io.File;
 import java.net.URL;
+import java.net.URLDecoder;
 import javax.servlet.http.*;
 
 import org.apache.tomcat.core.Request;
@@ -73,7 +74,8 @@
v.addElement("FULL DOC BASE: " + context.getDocumentBase().toString());
v.addElement("PATH: " + context.getPath());
if (context.getWorkDir() != null)
-  v.addElement("WORK DIR: " + 
RequestUtil.URLDecode(context.getWorkDir().getName()));
+  v.addElement("WORK DIR: " + 
+URLDecoder.decode(context.getWorkDir().getName()));
+  //v.addElement("WORK DIR: " + 
+RequestUtil.URLDecode(context.getWorkDir().getName()));
 
v.addElement("DESCRIPTION: " + context.getDescription());
v.addElement("SESSION TIMEOUT: " + new 
Integer(context.getSessionTimeOut()).toString());
@@ -89,7 +91,8 @@
while (enum.hasMoreElements()) {
key = (String)enum.nextElement();
v.addElement("ATTRIBUTE NAME: " + key);
-   v.addElement("ATTRIBUTE: " + 
RequestUtil.URLDecode(context.getAttribute(key).toString()));
+   v.addElement("ATTRIBUTE: " + 
+URLDecoder.decode(context.getAttribute(key).toString()));
+   //v.addElement("ATTRIBUTE: " + 
+RequestUtil.URLDecode(context.getAttribute(key).toString()));
}
 
v.addElement("SERVER INFO: " + context.getEngineHeader());



tc-3.2.2/3.2.3 Little Bug in ContextAdmin.java

2001-07-18 Thread Bernd Koecke

Hi,

with tomcat comes the admin-Context. When you use it and select the
'View All Context'-Button you get an IllegalArgumentException.

The error arises because of the use of the class
org.apache.tomcat.util.RequestUtil in the ContextAdmin-class which is
used by the ContextAdmin-JSP. In tomcat 3.2.2 and 3.2.3 the
RequestUtil-class throws the Exception when a '/' is URL-encoded in the
Parameter-String (explained in the release-notes of 3.2.3). This happens
e.g. in lines 76 and 92 of ContextAdmin.java.

A quick solution is to use java.net.URLDecoder.decode() instead of
RequestUtil. But this class was introduced in JDK 1.2, so users of older
JDKs don't have this solution. I'm using 1.3, so the quick solution
works fine for me :)

If someone is interested in the diffs, I could send them, but they are
very simple. If tomcat should run on JDKs prior to 1.2, I could write a
small function in ContextAdmin, which translates the '/' before sending
it to the RequestUtil-class and send the diffs of this.

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]



Re: mod_jk in a cluster

2001-04-06 Thread Bernd Koecke

James Courtney wrote:
> 
> With the exception of failover (case 4 below), I believe that the first
> three cases can be handled by having your load balancer be "sticky" by
> client address to any of the app servers (machines running Apache with
> Tomcat).  Thus if your load balancer receives a request from client
> some.client.net and round robin assigns the request to server B, given
> servers A, B, and C, then all subsequest requests from some.client.net
> should be routed to server B.

Our load balancer is very poor. He does weighted round robbin and the
weights are the system load of the cluster computer. He can't look in
the IP-Packets and doesn't know anything about sessions. And he also
doesn't cache the client-ip's. So the load balancer can't handle the
stickyness of the sessions. This is handled in the past by mod_jserv in
the apache-webserver on the cluster. But now we want to use tomcat with
mod_jk because of 2.2servlets and the better handling of SSL in ajp13.
After playing around with mod_jk I build a new worker, my needs are more
like a router (because of the sessions) with failover and not a load
balancer (lb-worker). So I think my first idea to add a new property to
the lb-worker wasn't clever. mod_jk is compiled, so I have to test it.
This will take a little time.

>  If B ever goes down the session information
> from some.client.net is lost and the client will have to retry their
> session.  To implement a failover system is highly non-trivial and my
> understanding is that most application servers (even commercial ones) do not
> support this.  In fact I'm told by several coworkers who worked formerly for
> BEA and know people there up to and including the B, the E, and the A that
> WebLogic only recently got failover with session replication right.  To make
> this work you will need a somewhat complicated session replication mechanism
> between all app servers which is n(n-1) replications (in this case 6) if
> replication is done between all servers and at best n choose 2 (in this case
> 3, or an extra session "write through" per request if you prefer)
> replications if each app server has a single failover server.  That can be a
> lot of network traffic and a lot of new code.  If I'm wrong and there's a
> way to make this work in Tomcat then kudos to all involved and let me know
> how to do it:)!
> -Jamey

I agree. Session replication is a solution but it isn't clever. You have
to mutch traffic for the hopefully rare case of a server crash. So we
make the following: If you have a session on a server wich is crashed,
you get a new one on a server which is up and start at the beginning.
This is handled by our servlets. So with my new worker in conjunction
with our servlets I should get the desired behaviour. Thanks to the
developers of mod_jk! My C-knowledge is not very well, but with the help
of the comments and variable/function-names in the source I got it. The
code is a little bit special to our purpose, but if there are interests
in the small code I could send it to the list. But I think we should
wait till it is tested :).

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]



mod_jk in a cluster

2001-04-05 Thread Bernd Koecke

Hi,

we want to use tomcat 3.2.1 in a cluster-environment. This is not a
request that someone else should code something. I think I have a
solution, but may be others are interested in it too.

We have, lets say three cluster-computer (server) and one simple
load-balancer. The load-balancer doesn't look in the Packets and doesn't
know something about Sessions etc. The server are running with apache +
tomcat. apache with mod_jk. The following things could happen:

- a request arrives at a server without a session => it should be routed
to tomcat on this server
- a request with a session on another server arrives => should be routed
to the other server
- a request with a session on this server arrives => should be routed to
this server
- a request with a session on a server which is down arrives => use
another server and send him the request. The session is not present
there and our application handles this

Is there a way to get this with existing modules? My solution plays
around with mod_jk as follows:

The easiest way is to switch off load-balancing and recovering with an
additional property in the config. But I could understand if someone
says this should be a new module. But it could work with mod_jk. For
this I use the lb_worker which controls three ajp13-worker on every
server. The ajp13-worker are connected to the three tomcats. Now I have
two possibilities:

- set the lb_value of the worker for the local tomcat to 1 and >1 for
the other workers, then switch off load-balancing by setting lb_factor
to 0.0. This should give an error because of the validate-function, but
it could be fixed with a small patch.
- setting the lb_value for the worker which is connected to tomcat on
the same server to -1 and 1 for the others and the lb_factor to a
negative value. 

Both solutions are incorrect if one of the tomcats goes down, because of
the recovering. So I come to the first idea, to use an additional flag.
If it works here, are there interests in a diff of mod_jk?

Bernd
-- 
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: [EMAIL PROTECTED]