On Thu, 2 Jan 2003, Costin Manolache wrote:
> Date: Thu, 02 Jan 2003 09:23:49 -0800 > From: Costin Manolache <[EMAIL PROTECTED]> > Reply-To: Tomcat Developers List <[EMAIL PROTECTED]> > To: [EMAIL PROTECTED] > Subject: Re: cvs commit: jakarta-tomcat-connectors/jk/xdocs/jk > workershowto.xml > > Are you going to port this to jk2 :-) ? > > One issue: I'm not sure JavaGroup is doing the synchronous(?) replication of > session data - there is a delay between a change is made on one worker and > the moment this is known on all other workers. > > If you don't route back to the same worker - you'll loose data. If the > original worker doesn't respond - you can send to a different worker in > the group. > A further subtlety to keep in mind is a restriction from Section 7.7.2: Within an application marked as distributable, all requests that are part of a session must be handled by one virtual machine at a time. In other words, it's legal to migrate sessions from one JVM to another "in between" requests. But it's not legal to send two simultaneous requests for the same session to two different JVMs. I don't know all the implications of this patch, but it sounds like you might be going down a path that will have problems with this requirement. (And it's also not technicallly legal to distribute an app that is not marked <distributable/> in web.xml, but that's a separate issue ....) > Costin > Craig > > > [EMAIL PROTECTED] wrote: > > > glenn 2003/01/02 09:12:55 > > > > Modified: jk/native CHANGES.txt > > jk/native/common jk_lb_worker.c jk_util.c jk_util.h > > jk/xdocs/jk workershowto.xml > > Log: > > Add new lb property sticky_session. If set to 0, requests with session > > id's do not have to be routed back to the same Tomcat worker. This is > > to support the new Tomcat Session Manager code which supports > > persistance of session data across multiple Tomcat instances, such as > > JavaGroup's. > > > > Revision Changes Path > > 1.9 +4 -1 jakarta-tomcat-connectors/jk/native/CHANGES.txt > > > > Index: CHANGES.txt > > =================================================================== > > RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/CHANGES.txt,v > > retrieving revision 1.8 > > retrieving revision 1.9 > > diff -u -r1.8 -r1.9 > > --- CHANGES.txt 2 Jan 2003 13:00:59 -0000 1.8 > > +++ CHANGES.txt 2 Jan 2003 17:12:55 -0000 1.9 > > @@ -6,6 +6,9 @@ > > [glenn] > > * Apache 2/1.3, if Tomcat returns an error but not content, > > let Apache handle processing the error returned by Tomcat. > > + * Added the load balancer sticky_session property. If set to 0 > > + requests with servlet SESSION ID's can be routed to any Tomcat > > + worker. Default is 1, sessions are sticky. > > > > Changes with JK 1.2.2: > > * tomcat_trend.pl updated script to support changed logging of > > > > > > > > 1.12 +9 -3 > > jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c > > > > Index: jk_lb_worker.c > > =================================================================== > > RCS file: > > /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_lb_worker.c,v > > retrieving revision 1.11 retrieving revision 1.12 > > diff -u -r1.11 -r1.12 > > --- jk_lb_worker.c 30 Oct 2002 21:17:34 -0000 1.11 > > +++ jk_lb_worker.c 2 Jan 2003 17:12:55 -0000 1.12 > > @@ -103,6 +103,7 @@ > > jk_worker_t worker; > > int in_local_worker_mode; > > int local_worker_only; > > + int sticky_session; > > }; > > typedef struct lb_worker lb_worker_t; > > > > @@ -254,8 +255,12 @@ > > worker_record_t *rc = NULL; > > double lb_min = 0.0; > > unsigned i; > > - char *session_route = get_session_route(s); > > - > > + char *session_route = NULL; > > + > > + if (p->sticky_session) { > > + session_route = get_session_route(s); > > + } > > + > > if(session_route) { > > for(i = 0 ; i < p->num_of_workers ; i++) { > > if(0 == strcmp(session_route, p->lb_workers[i].name)) { > > @@ -421,6 +426,7 @@ > > unsigned num_of_workers; > > p->in_local_worker_mode = JK_FALSE; > > p->local_worker_only = jk_get_local_worker_only_flag(props, > > p->name); > > + p->sticky_session = jk_get_is_sticky_session(props, p->name); > > > > if(jk_get_lb_worker_list(props, > > p->name, > > > > > > > > 1.19 +15 -1 > > jakarta-tomcat-connectors/jk/native/common/jk_util.c > > > > Index: jk_util.c > > =================================================================== > > RCS file: > > /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.c,v > > retrieving revision 1.18 retrieving revision 1.19 > > diff -u -r1.18 -r1.19 > > --- jk_util.c 16 Sep 2002 08:26:46 -0000 1.18 > > +++ jk_util.c 2 Jan 2003 17:12:55 -0000 1.19 > > @@ -89,6 +89,7 @@ > > #define SOCKET_KEEPALIVE_OF_WORKER ("socket_keepalive") > > #define LOAD_FACTOR_OF_WORKER ("lbfactor") > > #define BALANCED_WORKERS ("balanced_workers") > > +#define STICKY_SESSION ("sticky_session") > > #define LOCAL_WORKER_ONLY_FLAG ("local_worker_only") > > #define LOCAL_WORKER_FLAG ("local_worker") > > #define WORKER_AJP12 ("ajp12") > > @@ -499,6 +500,19 @@ > > sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, > > LOAD_FACTOR_OF_WORKER); > > > > return map_get_double(m, buf, DEFAULT_LB_FACTOR); > > +} > > + > > +int jk_get_is_sticky_session(jk_map_t *m, > > + const char *wname) { > > + int rc = JK_TRUE; > > + char buf[1024]; > > + if (m && wname) { > > + int value; > > + sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, > > STICKY_SESSION); > > + value = map_get_int(m, buf, 0); > > + if (!value) rc = JK_FALSE; > > + } > > + return rc; > > } > > > > int jk_get_is_local_worker(jk_map_t *m, > > > > > > > > 1.9 +4 -1 > > jakarta-tomcat-connectors/jk/native/common/jk_util.h > > > > Index: jk_util.h > > =================================================================== > > RCS file: > > /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_util.h,v > > retrieving revision 1.8 retrieving revision 1.9 > > diff -u -r1.8 -r1.9 > > --- jk_util.h 16 Sep 2002 08:26:46 -0000 1.8 > > +++ jk_util.h 2 Jan 2003 17:12:55 -0000 1.9 > > @@ -134,6 +134,9 @@ > > double jk_get_lb_factor(jk_map_t *m, > > const char *wname); > > > > +int jk_get_is_sticky_session(jk_map_t *m, > > + const char *wname); > > + > > int jk_get_is_local_worker(jk_map_t *m, > > const char *wname); > > > > > > > > > > 1.10 +8 -5 > > jakarta-tomcat-connectors/jk/xdocs/jk/workershowto.xml > > > > Index: workershowto.xml > > =================================================================== > > RCS file: > > /home/cvs/jakarta-tomcat-connectors/jk/xdocs/jk/workershowto.xml,v > > retrieving revision 1.9 retrieving revision 1.10 > > diff -u -r1.9 -r1.10 > > --- workershowto.xml 26 Nov 2002 16:08:48 -0000 1.9 > > +++ workershowto.xml 2 Jan 2003 17:12:55 -0000 1.10 > > @@ -300,11 +300,14 @@ > > <p> > > The overall result is that workers managed by the same lb worker are > > load-balanced (based on their lbfactor and current user session) and > > also fall-backed so a single Tomcat process death will not "kill" the > > entire site. The following table specifies properties that the lb > > worker can accept: > > -</p> > > - > > -<p> > > -<b>balanced_workers</b> is a comma separated list of workers that the > > load balancer need to manage. -These workers should not appear in the > > worker.list property. +<ul> > > +<li><b>balanced_workers</b> is a comma separated list of workers that > > the load balancer need to manage. +These workers should not appear in > > the worker.list property.</li> +<li><b>sticky_session</b> specifies > > whether requests with SESSION ID's should be routed back to the same > > +Tomcat worker. If sticky_session is an int and is not 0 it is set to > > JK_TRUE and sessions are sticky, otherwise +sticky_session is set to > > false. Set sticky_session to JK_FALSE when Tomcat is using a Session > > Manager which +can persist session data across multiple instances of > > Tomcat. By default sticky_session is set to JK_TRUE.</li> +</ul> > > </p> > > > > <screen> > > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>