You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by gl...@apache.org on 2003/01/02 18:12:55 UTC

cvs commit: jakarta-tomcat-connectors/jk/xdocs/jk workershowto.xml

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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: cvs commit: jakarta-tomcat-connectors/jk/xdocs/jk workershowto.xml

Posted by Glenn Nielsen <gl...@mail.more.net>.
Craig R. McClanahan wrote:
> 
> On Thu, 2 Jan 2003, Costin Manolache wrote:
> 
> 
>>Date: Thu, 02 Jan 2003 09:23:49 -0800
>>From: Costin Manolache <cm...@yahoo.com>
>>Reply-To: Tomcat Developers List <to...@jakarta.apache.org>
>>To: tomcat-dev@jakarta.apache.org
>>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
> 
> 
> 
>>
>>glenn@apache.org 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:   <ma...@jakarta.apache.org>
>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>
>>
> 
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: cvs commit: jakarta-tomcat-connectors/jk/xdocs/jk workershowto.xml

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Thu, 2 Jan 2003, Costin Manolache wrote:

> Date: Thu, 02 Jan 2003 09:23:49 -0800
> From: Costin Manolache <cm...@yahoo.com>
> Reply-To: Tomcat Developers List <to...@jakarta.apache.org>
> To: tomcat-dev@jakarta.apache.org
> 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


>
>
> glenn@apache.org 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:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: cvs commit: jakarta-tomcat-connectors/jk/xdocs/jk workershowto.xml

Posted by Costin Manolache <cm...@yahoo.com>.
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



glenn@apache.org 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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>