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 [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]> * * 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 <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * 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 <[EMAIL PROTECTED]> * * Author: Henri Gomez <[EMAIL PROTECTED]> * - * 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: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>