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>