Craig R. McClanahan wrote:
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 :-) ?
It could be I ported to jk2, only a few lines of code. :-)
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.
Yes, there very well could be problems with persistance of session data
across multiple tomcat workers. Being able to seamlessly failover from
one tomcat worker to another without loosing session data is an important
feature when you start clustering. At least with this property we can start
testing different session persistance solutions.
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 ....)
Thanks for the heads up Craig.
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]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>