You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/05/15 23:00:29 UTC

cvs commit: jakarta-tomcat-connectors/jk/native/common jk_lb_worker.c jk_util.c jk_util.h

costin      02/05/15 14:00:29

  Modified:    jk/native build.xml
               jk/native/common jk_lb_worker.c jk_util.c jk_util.h
  Log:
  Patch from  Bernd Koecke, adding better support for hw balancers
  
  Submitted by:	Bernd Keocke bk@schlund.de
  
  Revision  Changes    Path
  1.33      +4 -1      jakarta-tomcat-connectors/jk/native/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/build.xml,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- build.xml	7 May 2002 01:43:52 -0000	1.32
  +++ build.xml	15 May 2002 21:00:29 -0000	1.33
  @@ -82,7 +82,7 @@
   	<include name="${novellndk.dir}/include" if="netware" />
           <include name="${java.home}/../include/netware" if="netware" />
           <include name="${java.home}/../include/hp-ux" if="hpux" />        
  -        <include name="${java.home}/../include/linux" if="linux" />
  +        <include name="${java.home}/../include/linux"  if="linux"/>
           <include name="${java.home}/../include/win32" if="win32" />
         </includes>
         <depends>
  @@ -162,6 +162,7 @@
           <include name="${java.home}/../include/win32" if="win32" />
           <include name="${java.home}/../include/hp-ux" if="hpux" />        
           <include name="${java.home}/../include/netware" if="netware" />
  +        <include name="${java.home}/../include/linux"  if="linux"/>
   	<include name="${novelllibc.dir}/include" if="netware" />
         </includes>
         <depends>
  @@ -223,6 +224,7 @@
         <src dir=".">
   	<include name="apache-1.3/mod_jk.c" />
   	<include name="common/*.c" />
  +	<exclude name="common/jk_jni_worker.c" />
           <exclude name="common/jk_nwmain.c" unless="netware" />
           <include name="common/apr/*.c" unless="HAVE_APR" />
         </src>
  @@ -365,6 +367,7 @@
           
   	<include name="${novellndk.dir}/include/nlm" if="netware" />
   	<include name="${novellndk.dir}/include" if="netware" />
  +        <include name="${java.home}/../include/linux" if="linux" />
           <include name="${java.home}/../include/netware" if="netware" />
                    
   	<include name="${apache13.home}/os/win32" if="win32" />
  
  
  
  1.10      +55 -20    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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- jk_lb_worker.c	3 May 2002 23:32:43 -0000	1.9
  +++ jk_lb_worker.c	15 May 2002 21:00:29 -0000	1.10
  @@ -60,7 +60,7 @@
    *              several workers.                                           *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Based on:                                                               *
  - * Version:     $Revision: 1.9 $                                           *
  + * Version:     $Revision: 1.10 $                                           *
    ***************************************************************************/
   
   #include "jk_pool.h"
  @@ -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]);
  +    
  +                        break;
  +                    }
  +                }
  +            } else {
  +                if(p->lb_workers[i].lb_value < lb_min || !rc) {
  +                    lb_min = p->lb_workers[i].lb_value;
                       rc = &(p->lb_workers[i]);
  -
  -                    break;
  +                    if (rc->is_local_worker) break;
                   }
               }
  -        } else {
  -            if(p->lb_workers[i].lb_value < lb_min || !rc) {
  -                lb_min = p->lb_workers[i].lb_value;
  -                rc = &(p->lb_workers[i]);
  -            }
  -        }            
  +        }
       }
   
  -    if(rc && rc->lb_value != 0 ) {
  +    if(rc && !rc->is_local_worker) {
           rc->lb_value += rc->lb_factor;                
       }
   
  @@ -415,12 +419,15 @@
           lb_worker_t *p = pThis->worker_private;
           char **worker_names;
           unsigned num_of_workers;
  +        p->in_local_worker_mode = JK_FALSE;
  +        p->local_worker_only = jk_get_local_worker_only_flag(props, p->name);
           
           if(jk_get_lb_worker_list(props,
                                    p->name,
                                    &worker_names, 
                                    &num_of_workers) && num_of_workers) {
               unsigned i = 0;
  +            unsigned j = 0;
   
               p->lb_workers = jk_pool_alloc(&p->p, 
                                             num_of_workers * sizeof(worker_record_t));
  @@ -440,6 +447,8 @@
                       p->lb_workers[i].lb_factor = 1/p->lb_workers[i].lb_factor;
                   }
   
  +                p->lb_workers[i].is_local_worker = jk_get_is_local_worker(props, worker_names[i]);
  +                if (p->lb_workers[i].is_local_worker) p->in_local_worker_mode = JK_TRUE;
                   /* 
                    * Allow using lb in fault-tolerant mode.
                    * A value of 0 means the worker will be used for all requests without
  @@ -454,16 +463,42 @@
                                        we,
                                        l) || !p->lb_workers[i].w) {
                       break;
  +                } else if (p->lb_workers[i].is_local_worker) {
  +                    /*
  +                     * If lb_value is 0 than move it at the beginning of the list
  +                     */
  +                    if (i != j) {
  +                        worker_record_t tmp_worker;
  +                        tmp_worker = p->lb_workers[j];
  +                        p->lb_workers[j] = p->lb_workers[i];
  +                        p->lb_workers[i] = tmp_worker;
  +                    }
  +                    j++;
                   }
               }
  -
  +            
  +            if (!p->in_local_worker_mode) {
  +                p->local_worker_only = JK_FALSE;
  +            }
  +            
               if(i != num_of_workers) {
                   close_workers(p, i, l);
  -                jk_log(l, JK_LOG_ERROR, 
  +                jk_log(l, JK_LOG_DEBUG, 
                          "In jk_worker_t::validate: Failed to create worker %s\n",
                          p->lb_workers[i].name);
   
               } else {
  +                for (i = 0; i < num_of_workers; i++) {
  +                    jk_log(l, JK_LOG_DEBUG,
  +                        "Balanced worker %i has name %s\n",
  +                        i, p->lb_workers[i].name);
  +                }
  +                jk_log(l, JK_LOG_DEBUG,
  +                        "in_local_worker_mode: %s\n",
  +                        (p->in_local_worker_mode ? "true" : "false"));
  +                jk_log(l, JK_LOG_DEBUG,
  +                        "local_worker_only: %s\n",
  +                        (p->local_worker_only ? "true" : "false"));
                   p->num_of_workers = num_of_workers;
                   return JK_TRUE;
               }
  
  
  
  1.14      +29 -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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- jk_util.c	21 Apr 2002 22:57:11 -0000	1.13
  +++ jk_util.c	15 May 2002 21:00:29 -0000	1.14
  @@ -59,7 +59,7 @@
    * Description: Utility functions (mainly configuration)                   *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Author:      Henri Gomez <hg...@slib.fr>                               *
  - * Version:     $Revision: 1.13 $                                           *
  + * Version:     $Revision: 1.14 $                                           *
    ***************************************************************************/
   
   
  @@ -85,6 +85,8 @@
   #define CACHE_OF_WORKER             ("cachesize")
   #define LOAD_FACTOR_OF_WORKER       ("lbfactor")
   #define BALANCED_WORKERS            ("balanced_workers")
  +#define LOCAL_WORKER_ONLY_FLAG      ("local_worker_only")
  +#define LOCAL_WORKER_FLAG           ("local_worker")
   #define WORKER_AJP12                ("ajp12")
   #define DEFAULT_WORKER_TYPE         JK_AJP12_WORKER_NAME
   #define SECRET_KEY_OF_WORKER        ("secretkey")
  @@ -444,6 +446,32 @@
       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_local_worker(jk_map_t *m,
  +                            const char *wname) {
  +    int rc = JK_FALSE;
  +    char buf[1024];
  +    if (m && wname) {
  +        int value;
  +        sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, wname, LOCAL_WORKER_FLAG);
  +        value = map_get_int(m, buf, 0);
  +        if (value) rc = JK_TRUE;
  +    }
  +    return rc;
  +}
  +
  +int jk_get_local_worker_only_flag(jk_map_t *m,
  +                        const char *lb_wname) {
  +    int rc = JK_FALSE;
  +    char buf[1024];
  +    if (m && lb_wname) {
  +        int value;
  +        sprintf(buf, "%s.%s.%s", PREFIX_OF_WORKER, lb_wname, LOCAL_WORKER_ONLY_FLAG);
  +        value = map_get_int(m, buf, 0);
  +        if (value) rc = JK_TRUE;
  +    }
  +    return rc;
   }
   
   int jk_get_lb_worker_list(jk_map_t *m, 
  
  
  
  1.6       +7 -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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- jk_util.h	6 Feb 2002 19:11:23 -0000	1.5
  +++ jk_util.h	15 May 2002 21:00:29 -0000	1.6
  @@ -59,7 +59,7 @@
    * Description: Various utility functions                                  *
    * Author:      Gal Shachor <sh...@il.ibm.com>                           *
    * Author:      Henri Gomez <hg...@slib.fr>                               *
  - * Version:     $Revision: 1.5 $                                           *
  + * Version:     $Revision: 1.6 $                                           *
    ***************************************************************************/
   #ifndef _JK_UTIL_H
   #define _JK_UTIL_H
  @@ -121,6 +121,12 @@
   
   double jk_get_lb_factor(jk_map_t *m, 
                           const char *wname);
  +
  +int jk_get_is_local_worker(jk_map_t *m,
  +                        const char *wname);
  +
  +int jk_get_is_local_worker_only_flag(jk_map_t *m,
  +                       const char *lb_wname);
   
   int jk_get_lb_worker_list(jk_map_t *m, 
                             const char *lb_wname,
  
  
  

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