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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org