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.
Costin
[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]>