Author: rjung
Date: Thu Jan 4 20:12:12 2018
New Revision: 1820195
URL: http://svn.apache.org/viewvc?rev=1820195&view=rev
Log:
BZ 61733: LB: Propagate load factor changes applied
by the status worker to a load balancer sub worker
correctly to all processes.
Based on a patch provided by Jonathan Oddy.
Modified:
tomcat/jk/trunk/native/common/jk_lb_worker.c
tomcat/jk/trunk/native/common/jk_lb_worker.h
tomcat/jk/trunk/native/common/jk_status.c
tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c
URL:
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.c?rev=1820195&r1=1820194&r2=1820195&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Thu Jan 4 20:12:12 2018
@@ -369,7 +369,7 @@ void jk_lb_pull(lb_worker_t *p, int lock
}
/* Syncing config values to shm */
-void jk_lb_push(lb_worker_t *p, int locked, jk_logger_t *l)
+void jk_lb_push(lb_worker_t *p, int locked, int push_all_members, jk_logger_t
*l)
{
unsigned int i = 0;
@@ -394,7 +394,7 @@ void jk_lb_push(lb_worker_t *p, int lock
for (i = 0; i < p->num_of_workers; i++) {
lb_sub_worker_t *w = &p->lb_workers[i];
- if (w->sequence != w->s->h.sequence) {
+ if (push_all_members == JK_TRUE || w->sequence != w->s->h.sequence) {
jk_worker_t *jw = w->worker;
ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
@@ -1959,7 +1959,7 @@ static int JK_METHOD init(jk_worker_t *p
if (p->s->h.sequence == 0) {
/* Set configuration data to shared memory
*/
- jk_lb_push(p, JK_TRUE, log);
+ jk_lb_push(p, JK_TRUE, JK_FALSE, log);
}
else {
/* Shared memory for this worker is already configured.
Modified: tomcat/jk/trunk/native/common/jk_lb_worker.h
URL:
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.h?rev=1820195&r1=1820194&r2=1820195&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.h (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.h Thu Jan 4 20:12:12 2018
@@ -219,7 +219,7 @@ const char *jk_lb_get_activation(lb_sub_
int jk_lb_get_activation_code(const char *v);
void reset_lb_values(lb_worker_t *p, jk_logger_t *l);
void jk_lb_pull(lb_worker_t * p, int locked, jk_logger_t *l);
-void jk_lb_push(lb_worker_t * p, int locked, jk_logger_t *l);
+void jk_lb_push(lb_worker_t * p, int locked, int push_all_members, jk_logger_t
*l);
void update_mult(lb_worker_t * p, jk_logger_t *l);
#ifdef __cplusplus
Modified: tomcat/jk/trunk/native/common/jk_status.c
URL:
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_status.c?rev=1820195&r1=1820194&r2=1820195&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_status.c (original)
+++ tomcat/jk/trunk/native/common/jk_status.c Thu Jan 4 20:12:12 2018
@@ -3350,7 +3350,7 @@ static void commit_worker(jk_ws_service_
}
if (sync_needed == JK_TRUE) {
lb->sequence = -1;
- jk_lb_push(lb, JK_TRUE, l);
+ jk_lb_push(lb, JK_TRUE, JK_FALSE, l);
}
}
@@ -3640,6 +3640,7 @@ static void commit_all_members(jk_ws_ser
int i;
int rc = 0;
unsigned int j;
+ int push_all_members = JK_FALSE;
JK_TRACE_ENTER(l);
if (!attribute) {
@@ -3887,12 +3888,14 @@ static void commit_all_members(jk_ws_ser
}
if (rc == 1)
reset_lb_values(lb, l);
- else if (rc == 2)
+ else if (rc == 2) {
/* Recalculate the load multiplicators wrt. lb_factor */
update_mult(lb, l);
+ push_all_members = JK_TRUE;
+ }
if (rc) {
lb->sequence = -1;
- jk_lb_push(lb, JK_TRUE, l);
+ jk_lb_push(lb, JK_TRUE, push_all_members, l);
}
}
JK_TRACE_EXIT(l);
@@ -4395,16 +4398,16 @@ static int update_worker(jk_ws_service_t
if (rv & JK_STATUS_NEEDS_ADDR_PUSH) {
aw->addr_sequence = -1;
}
- if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) {
- wr->sequence = -1;
- lb->sequence = -1;
- jk_lb_push(lb, JK_TRUE, l);
- }
if (rv & JK_STATUS_NEEDS_RESET_LB_VALUES)
reset_lb_values(lb, l);
if (rv & JK_STATUS_NEEDS_UPDATE_MULT)
/* Recalculate the load multiplicators wrt. lb_factor */
update_mult(lb, l);
+ if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) {
+ wr->sequence = -1;
+ lb->sequence = -1;
+ jk_lb_push(lb, JK_TRUE, rv & JK_STATUS_NEEDS_UPDATE_MULT ?
JK_TRUE: JK_FALSE, l);
+ }
if (rc == JK_FALSE) {
jk_log(l, JK_LOG_ERROR,
"Status worker '%s' failed updating sub worker '%s'
(at least partially).%s",
Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1820195&r1=1820194&r2=1820195&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Thu Jan 4 20:12:12 2018
@@ -45,6 +45,11 @@
<subsection name="Native">
<changelog>
<fix>
+ <bug>61733</bug>: LB: Propagate load factor changes applied by the
status worker
+ to a load balancer sub worker correctly to all processes.
+ Based on a patch provided by Jonathan Oddy. (rjung)
+ </fix>
+ <fix>
ISAPI: Align the make files for 32-bit and 64-bit builds. (markt)
</fix>
<update>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]