Author: rjung Date: Wed Jan 9 16:52:57 2008 New Revision: 610623 URL: http://svn.apache.org/viewvc?rev=610623&view=rev Log: LB sub member dynamic management part 2: Use local memory copies of read mostly shm attributes of lb sub workers in lb and status worker.
Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c tomcat/connectors/trunk/jk/native/common/jk_status.c tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=610623&r1=610622&r2=610623&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Wed Jan 9 16:52:57 2008 @@ -40,8 +40,8 @@ * The load balancing code in this */ -#define JK_WORKER_USABLE(w) ((w)->state != JK_LB_STATE_ERROR && (w)->state != JK_LB_STATE_PROBE && (w)->state != JK_LB_STATE_BUSY && (w)->activation != JK_LB_ACTIVATION_STOPPED && (w)->activation != JK_LB_ACTIVATION_DISABLED) -#define JK_WORKER_USABLE_STICKY(w) ((w)->state != JK_LB_STATE_ERROR && (w)->state != JK_LB_STATE_PROBE && (w)->activation != JK_LB_ACTIVATION_STOPPED) +#define JK_WORKER_USABLE(w) ((w)->s->state != JK_LB_STATE_ERROR && (w)->s->state != JK_LB_STATE_PROBE && (w)->s->state != JK_LB_STATE_BUSY && (w)->activation != JK_LB_ACTIVATION_STOPPED && (w)->activation != JK_LB_ACTIVATION_DISABLED) +#define JK_WORKER_USABLE_STICKY(w) ((w)->s->state != JK_LB_STATE_ERROR && (w)->s->state != JK_LB_STATE_PROBE && (w)->activation != JK_LB_ACTIVATION_STOPPED) static const char *lb_locking_type[] = { JK_LB_LOCK_TEXT_OPTIMISTIC, @@ -211,7 +211,7 @@ /* Return the string representation of the balance worker activation */ const char *jk_lb_get_activation(worker_record_t *p, jk_logger_t *l) { - return lb_activation_type[p->s->activation]; + return lb_activation_type[p->activation]; } int jk_lb_get_activation_code(const char *v) @@ -235,16 +235,16 @@ jk_uint64_t s = 1; JK_TRACE_ENTER(l); for (i = 0; i < p->num_of_workers; i++) { - s = scm(s, p->lb_workers[i].s->lb_factor); + s = scm(s, p->lb_workers[i].lb_factor); } for (i = 0; i < p->num_of_workers; i++) { - p->lb_workers[i].s->lb_mult = s / p->lb_workers[i].s->lb_factor; + p->lb_workers[i].lb_mult = s / p->lb_workers[i].lb_factor; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "worker %s gets multiplicity %" JK_UINT64_T_FMT, - p->lb_workers[i].s->name, - p->lb_workers[i].s->lb_mult); + p->lb_workers[i].name, + p->lb_workers[i].lb_mult); } JK_TRACE_EXIT(l); } @@ -273,7 +273,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "syncing mem for lb '%s' from shm", - p->s->name); + p->name); p->sticky_session = p->s->sticky_session; p->sticky_session_force = p->s->sticky_session_force; p->recover_wait_time = p->s->recover_wait_time; @@ -289,7 +289,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "syncing mem for member '%s' of lb '%s' from shm", - w->s->name, p->s->name); + w->name, p->name); strncpy(w->route, w->s->route, JK_SHM_STR_SIZ); strncpy(w->domain, w->s->domain, JK_SHM_STR_SIZ); strncpy(w->redirect, w->s->redirect, JK_SHM_STR_SIZ); @@ -314,7 +314,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "syncing shm for lb '%s' from mem", - p->s->name); + p->name); p->s->sticky_session = p->sticky_session; p->s->sticky_session_force = p->sticky_session_force; p->s->recover_wait_time = p->recover_wait_time; @@ -330,7 +330,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "syncing shm for member '%s' of lb '%s' from mem", - w->s->name, p->s->name); + w->name, p->name); strncpy(w->s->route, w->route, JK_SHM_STR_SIZ); strncpy(w->s->domain, w->domain, JK_SHM_STR_SIZ); strncpy(w->s->redirect, w->redirect, JK_SHM_STR_SIZ); @@ -492,17 +492,17 @@ w = &p->lb_workers[i]; if (w->s->state == JK_LB_STATE_ERROR) { elapsed = (int)difftime(now, w->s->error_time); - if (elapsed <= p->s->recover_wait_time) { + if (elapsed <= p->recover_wait_time) { if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "worker %s will recover in %d seconds", - w->s->name, p->s->recover_wait_time - elapsed); + w->name, p->recover_wait_time - elapsed); } else { if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "worker %s is marked for recovery", - w->s->name); + w->name); if (p->lbmethod != JK_LB_METHOD_BUSYNESS) w->s->lb_value = curmax; w->s->reply_timeouts = 0; @@ -537,7 +537,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_INFO, "worker %s is marked for recovery", - w->s->name); + w->name); w->s->state = JK_LB_STATE_FORCE; forced++; } @@ -630,7 +630,7 @@ unsigned int i; for (i = 0; i < p->num_of_workers; i++) { - if (strcmp(p->lb_workers[i].s->route, name) == 0) { + if (strcmp(p->lb_workers[i].route, name) == 0) { rc = &p->lb_workers[i]; break; } @@ -651,19 +651,19 @@ /* First try to see if we have available candidate */ for (i = 0; i < p->num_of_workers; i++) { /* Skip all workers that are not member of domain */ - if (strlen(p->lb_workers[i].s->domain) == 0 || - strcmp(p->lb_workers[i].s->domain, domain)) + if (strlen(p->lb_workers[i].domain) == 0 || + strcmp(p->lb_workers[i].domain, domain)) continue; /* Take into calculation only the workers that are * not in error state, stopped, disabled or busy. */ - if (JK_WORKER_USABLE(p->lb_workers[i].s)) { - if (!candidate || p->lb_workers[i].s->distance < d || + if (JK_WORKER_USABLE(&p->lb_workers[i])) { + if (!candidate || p->lb_workers[i].distance < d || (p->lb_workers[i].s->lb_value < curmin && - p->lb_workers[i].s->distance == d)) { + p->lb_workers[i].distance == d)) { candidate = &p->lb_workers[i]; curmin = p->lb_workers[i].s->lb_value; - d = p->lb_workers[i].s->distance; + d = p->lb_workers[i].distance; } } } @@ -693,13 +693,13 @@ /* Take into calculation only the workers that are * not in error state, stopped, disabled or busy. */ - if (JK_WORKER_USABLE(p->lb_workers[i].s)) { - if (!candidate || p->lb_workers[i].s->distance < d || + if (JK_WORKER_USABLE(&p->lb_workers[i])) { + if (!candidate || p->lb_workers[i].distance < d || (p->lb_workers[i].s->lb_value < curmin && - p->lb_workers[i].s->distance == d)) { + p->lb_workers[i].distance == d)) { candidate = &p->lb_workers[i]; curmin = p->lb_workers[i].s->lb_value; - d = p->lb_workers[i].s->distance; + d = p->lb_workers[i].distance; p->next_offset = i + 1; } } @@ -722,7 +722,7 @@ *route_is_domain = JK_TRUE; } if (candidate) { - if (!JK_WORKER_USABLE_STICKY(candidate->s)) { + if (!JK_WORKER_USABLE_STICKY(candidate)) { /* We have a worker that is error state or stopped. * If it has a redirection set use that redirection worker. * This enables to safely remove the member from the @@ -731,15 +731,15 @@ */ if (p->sticky_session_force) candidate = NULL; - else if (*candidate->s->redirect) { - candidate = find_by_session(p, candidate->s->redirect, l); + else if (*candidate->redirect) { + candidate = find_by_session(p, candidate->redirect, l); *route_is_domain = JK_FALSE; } - else if (*candidate->s->domain && !uses_domain) { - candidate = find_best_bydomain(p, candidate->s->domain, l); + else if (*candidate->domain && !uses_domain) { + candidate = find_best_bydomain(p, candidate->domain, l); *route_is_domain = JK_TRUE; } - if (candidate && !JK_WORKER_USABLE_STICKY(candidate->s)) + if (candidate && !JK_WORKER_USABLE_STICKY(candidate)) candidate = NULL; } } @@ -755,8 +755,8 @@ const char *redirect = NULL; for (i = 0; i < p->num_of_workers; i++) { - if (strlen(p->lb_workers[i].s->redirect)) { - redirect = p->lb_workers[i].s->redirect; + if (strlen(p->lb_workers[i].redirect)) { + redirect = p->lb_workers[i].redirect; break; } } @@ -791,8 +791,8 @@ /* No need to find the best worker * if there is a single one */ - if (JK_WORKER_USABLE_STICKY(p->lb_workers[0].s)) { - if (p->lb_workers[0].s->activation != JK_LB_ACTIVATION_DISABLED) { + if (JK_WORKER_USABLE_STICKY(&p->lb_workers[0])) { + if (p->lb_workers[0].activation != JK_LB_ACTIVATION_DISABLED) { JK_TRACE_EXIT(l); return p->lb_workers; } @@ -843,7 +843,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "found worker %s (%s) for route %s and partial sessionid %s", - rc->s->name, rc->s->route, session_route, sessionid); + rc->name, rc->route, session_route, sessionid); JK_TRACE_EXIT(l); return rc; } @@ -874,7 +874,7 @@ if (rc && JK_IS_DEBUG_LEVEL(l)) { jk_log(l, JK_LOG_DEBUG, "found best worker %s (%s) using method '%s'", - rc->s->name, rc->s->route, jk_lb_get_method(p, l)); + rc->name, rc->route, jk_lb_get_method(p, l)); } JK_TRACE_EXIT(l); return rc; @@ -889,7 +889,7 @@ char *buf = jk_pool_alloc(s->pool, sizeof(char *) * JK_LB_NOTES_COUNT * JK_LB_UINT64_STR_SZ); if (log_values && buf) { /* JK_NOTE_LB_FIRST/LAST_NAME */ - log_values[0] = w->s->name; + log_values[0] = w->name; snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT64_T_FMT, w->s->lb_value); /* JK_NOTE_LB_FIRST/LAST_VALUE */ log_values[1] = buf; @@ -1002,15 +1002,15 @@ int retry = 0; int retry_wait = JK_LB_MIN_RETRY_WAIT; if (route_is_domain == JK_FALSE) - s->route = rec->s->route; + s->route = rec->route; else - s->route = rec->s->domain; + s->route = rec->domain; prec = rec; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "service worker=%s route=%s", - rec->s->name, s->route); + rec->name, s->route); if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC) jk_shm_lock(); @@ -1051,7 +1051,7 @@ jk_shm_unlock(); jk_log(l, JK_LOG_INFO, "could not get free endpoint for worker %s (%d retries)", - rec->s->name, retry); + rec->name, retry); } else { int service_stat = JK_UNSET; @@ -1077,7 +1077,7 @@ (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS) || (p->worker->lbmethod == JK_LB_METHOD_SESSIONS && !sessionid) ) - rec->s->lb_value += rec->s->lb_mult; + rec->s->lb_value += rec->lb_mult; if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC) jk_shm_unlock(); @@ -1095,11 +1095,11 @@ rec->s->readed += rd; rec->s->transferred += wr; if (p->worker->lbmethod == JK_LB_METHOD_TRAFFIC) { - rec->s->lb_value += (rd+wr)*rec->s->lb_mult; + rec->s->lb_value += (rd+wr)*rec->lb_mult; } else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS) { - if (rec->s->lb_value >= rec->s->lb_mult) { - rec->s->lb_value -= rec->s->lb_mult; + if (rec->s->lb_value >= rec->lb_mult) { + rec->s->lb_value -= rec->lb_mult; } else { rec->s->lb_value = 0; @@ -1111,9 +1111,9 @@ JK_UINT64_T_FMT ") ", "- correcting to 0", - rec->s->name, + rec->name, rec->s->lb_value, - rec->s->lb_mult); + rec->lb_mult); } } } @@ -1181,7 +1181,7 @@ } else if (service_stat == JK_REPLY_TIMEOUT) { rec->s->reply_timeouts++; - if (rec->s->reply_timeouts > (unsigned)p->worker->s->max_reply_timeouts) { + if (rec->s->reply_timeouts > (unsigned)p->worker->max_reply_timeouts) { /* * Service failed - to many reply timeouts * Take this node out of service. @@ -1216,7 +1216,7 @@ if (rec->s->state == JK_LB_STATE_ERROR) jk_log(l, JK_LOG_INFO, "service failed, worker %s is in error state", - rec->s->name); + rec->name); if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC) jk_shm_unlock(); } @@ -1333,12 +1333,12 @@ unsigned int num_of_workers; const char *secret; - p->sticky_session = jk_get_is_sticky_session(props, p->s->name); - p->sticky_session_force = jk_get_is_sticky_session_force(props, p->s->name); - secret = jk_get_worker_secret(props, p->s->name); + p->sticky_session = jk_get_is_sticky_session(props, p->name); + p->sticky_session_force = jk_get_is_sticky_session_force(props, p->name); + secret = jk_get_worker_secret(props, p->name); if (jk_get_lb_worker_list(props, - p->s->name, + p->name, &worker_names, &num_of_workers) && num_of_workers) { unsigned int i = 0; @@ -1365,12 +1365,16 @@ for (i = 0; i < num_of_workers; i++) { const char *s; unsigned int ms; + strncpy(p->lb_workers[i].name, worker_names[i], + JK_SHM_STR_SIZ); strncpy(p->lb_workers[i].s->name, worker_names[i], JK_SHM_STR_SIZ); - p->lb_workers[i].s->lb_factor = + p->lb_workers[i].sequence = 0; + p->lb_workers[i].s->sequence = 0; + p->lb_workers[i].lb_factor = jk_get_lb_factor(props, worker_names[i]); - if (p->lb_workers[i].s->lb_factor < 1) { - p->lb_workers[i].s->lb_factor = 1; + if (p->lb_workers[i].lb_factor < 1) { + p->lb_workers[i].lb_factor = 1; } /* Calculate the maximum packet size from all workers * for the recovery buffer. @@ -1378,23 +1382,23 @@ ms = jk_get_max_packet_size(props, worker_names[i]); if (ms > p->max_packet_size) p->max_packet_size = ms; - p->lb_workers[i].s->distance = + p->lb_workers[i].distance = jk_get_distance(props, worker_names[i]); if ((s = jk_get_worker_route(props, worker_names[i], NULL))) - strncpy(p->lb_workers[i].s->route, s, JK_SHM_STR_SIZ); + strncpy(p->lb_workers[i].route, s, JK_SHM_STR_SIZ); else - strncpy(p->lb_workers[i].s->route, worker_names[i], JK_SHM_STR_SIZ); + strncpy(p->lb_workers[i].route, worker_names[i], JK_SHM_STR_SIZ); if ((s = jk_get_worker_domain(props, worker_names[i], NULL))) - strncpy(p->lb_workers[i].s->domain, s, JK_SHM_STR_SIZ); + strncpy(p->lb_workers[i].domain, s, JK_SHM_STR_SIZ); if ((s = jk_get_worker_redirect(props, worker_names[i], NULL))) - strncpy(p->lb_workers[i].s->redirect, s, JK_SHM_STR_SIZ); + strncpy(p->lb_workers[i].redirect, s, JK_SHM_STR_SIZ); p->lb_workers[i].s->lb_value = 0; p->lb_workers[i].s->state = JK_LB_STATE_IDLE; p->lb_workers[i].s->error_time = 0; - p->lb_workers[i].s->activation = + p->lb_workers[i].activation = jk_get_worker_activation(props, worker_names[i]); - if (!wc_create_worker(p->lb_workers[i].s->name, 0, + if (!wc_create_worker(p->lb_workers[i].name, 0, props, &(p->lb_workers[i].w), we, l) || !p->lb_workers[i].w) { @@ -1411,17 +1415,17 @@ if (i != num_of_workers) { jk_log(l, JK_LOG_ERROR, "Failed creating worker %s", - p->lb_workers[i].s->name); + p->lb_workers[i].name); close_workers(p, i, l); } else { /* Update domain names if route contains period '.' */ for (i = 0; i < num_of_workers; i++) { - if (!p->lb_workers[i].s->domain[0]) { - char * id_domain = strchr(p->lb_workers[i].s->route, '.'); + if (!p->lb_workers[i].domain[0]) { + char * id_domain = strchr(p->lb_workers[i].route, '.'); if (id_domain) { *id_domain = '\0'; - strcpy(p->lb_workers[i].s->domain, p->lb_workers[i].s->route); + strcpy(p->lb_workers[i].domain, p->lb_workers[i].route); *id_domain = '.'; } } @@ -1429,23 +1433,23 @@ jk_log(l, JK_LOG_DEBUG, "Balanced worker %i has name %s and route %s in domain %s", i, - p->lb_workers[i].s->name, - p->lb_workers[i].s->route, - p->lb_workers[i].s->domain); + p->lb_workers[i].name, + p->lb_workers[i].route, + p->lb_workers[i].domain); } } p->num_of_workers = num_of_workers; update_mult(p, l); for (i = 0; i < num_of_workers; i++) { for (j = 0; j < i; j++) { - if (strcmp(p->lb_workers[i].s->route, p->lb_workers[j].s->route) == 0) { + if (strcmp(p->lb_workers[i].route, p->lb_workers[j].route) == 0) { jk_log(l, JK_LOG_ERROR, "Balanced workers number %i (%s) and %i (%s) share the same route %s - aborting configuration!", i, - p->lb_workers[i].s->name, + p->lb_workers[i].name, j, - p->lb_workers[j].s->name, - p->lb_workers[i].s->route); + p->lb_workers[j].name, + p->lb_workers[i].route); JK_TRACE_EXIT(l); return JK_FALSE; } @@ -1471,21 +1475,21 @@ lb_worker_t *p = (lb_worker_t *)pThis->worker_private; JK_TRACE_ENTER(log); - p->retries = jk_get_worker_retries(props, p->s->name, + p->retries = jk_get_worker_retries(props, p->name, JK_RETRIES); - p->recover_wait_time = jk_get_worker_recover_timeout(props, p->s->name, + p->recover_wait_time = jk_get_worker_recover_timeout(props, p->name, WAIT_BEFORE_RECOVER); if (p->recover_wait_time < 1) p->recover_wait_time = 1; - p->max_reply_timeouts = jk_get_worker_max_reply_timeouts(props, p->s->name, + p->max_reply_timeouts = jk_get_worker_max_reply_timeouts(props, p->name, 0); p->maintain_time = jk_get_worker_maintain_time(props); if(p->maintain_time < 0) p->maintain_time = 0; p->s->last_maintain_time = time(NULL); - p->lbmethod = jk_get_lb_method(props, p->s->name); - p->lblock = jk_get_lb_lock(props, p->s->name); + p->lbmethod = jk_get_lb_method(props, p->name); + p->lblock = jk_get_lb_lock(props, p->name); JK_INIT_CS(&(p->cs), i); if (i == JK_FALSE) { @@ -1571,6 +1575,7 @@ JK_TRACE_EXIT(l); return 0; } + strncpy(private_data->name, name, JK_SHM_STR_SIZ); strncpy(private_data->s->name, name, JK_SHM_STR_SIZ); private_data->lb_workers = NULL; private_data->num_of_workers = 0; @@ -1583,6 +1588,7 @@ private_data->recover_wait_time = WAIT_BEFORE_RECOVER; private_data->max_reply_timeouts = 0; private_data->sequence = 0; + private_data->s->sequence = 0; private_data->next_offset = 0; *w = &private_data->worker; JK_TRACE_EXIT(l); Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?rev=610623&r1=610622&r2=610623&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_status.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_status.c Wed Jan 9 16:52:57 2008 @@ -583,7 +583,7 @@ jk_logger_t *l) { jk_uint32_t mask = 0; - int activation = wr->s->activation; + int activation = wr->activation; int state = wr->s->state; jk_uint32_t good = w->good_mask; jk_uint32_t bad = w->bad_mask; @@ -1224,7 +1224,7 @@ } for (i = 0; i < (int)lb->num_of_workers; i++) { wr = &(lb->lb_workers[i]); - if (strcmp(sub_worker, wr->s->name) == 0) + if (strcmp(sub_worker, wr->name) == 0) break; } *wrp = wr; @@ -1457,7 +1457,7 @@ int ms_min; int ms_max; unsigned int j; - const char *name = lb->s->name; + const char *name = lb->name; status_worker_t *w = p->worker; JK_TRACE_ENTER(l); @@ -1661,28 +1661,28 @@ if (!read_only) { jk_puts(s, "["); status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN, - name, wr->s->name, 0, 0, "", l); + name, wr->name, 0, 0, "", l); jk_puts(s, "|"); status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN, - name, wr->s->name, 0, 0, "", l); + name, wr->name, 0, 0, "", l); if (wr->s->state == JK_LB_STATE_ERROR) { jk_puts(s, "|"); status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN, - name, wr->s->name, 0, 0, "", l); + name, wr->name, 0, 0, "", l); } jk_puts(s, "]"); } jk_puts(s, " </td>"); jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW, - wr->s->name, + wr->name, status_worker_type(wr->w->type), a->host, a->port, jk_dump_hinfo(&a->worker_inet_addr, buf), jk_lb_get_activation(wr, l), jk_lb_get_state(wr, l), - wr->s->distance, - wr->s->lb_factor, - wr->s->lb_mult, + wr->distance, + wr->lb_factor, + wr->lb_mult, wr->s->lb_value, wr->s->elected, wr->s->errors, @@ -1692,9 +1692,9 @@ status_strfsize(wr->s->readed, buf_rd), wr->s->busy, wr->s->max_busy, - wr->s->route, - wr->s->redirect ? (*wr->s->redirect ? wr->s->redirect : " ") : " ", - wr->s->domain ? (*wr->s->domain ? wr->s->domain : " ") : " ", + wr->route, + wr->redirect ? (*wr->redirect ? wr->redirect : " ") : " ", + wr->domain ? (*wr->domain ? wr->domain : " ") : " ", rs_min, rs_max); @@ -1702,19 +1702,19 @@ else if (mime == JK_STATUS_MIME_XML) { jk_print_xml_start_elt(s, w, 6, 0, "member"); - jk_print_xml_att_string(s, 8, "name", wr->s->name); + jk_print_xml_att_string(s, 8, "name", wr->name); jk_print_xml_att_string(s, 8, "type", status_worker_type(wr->w->type)); jk_print_xml_att_string(s, 8, "host", a->host); jk_print_xml_att_int(s, 8, "port", a->port); jk_print_xml_att_string(s, 8, "address", jk_dump_hinfo(&a->worker_inet_addr, buf)); jk_print_xml_att_string(s, 8, "activation", jk_lb_get_activation(wr, l)); - jk_print_xml_att_int(s, 8, "lbfactor", wr->s->lb_factor); - jk_print_xml_att_string(s, 8, "route", wr->s->route); - jk_print_xml_att_string(s, 8, "redirect", wr->s->redirect); - jk_print_xml_att_string(s, 8, "domain", wr->s->domain); - jk_print_xml_att_int(s, 8, "distance", wr->s->distance); + jk_print_xml_att_int(s, 8, "lbfactor", wr->lb_factor); + jk_print_xml_att_string(s, 8, "route", wr->route); + jk_print_xml_att_string(s, 8, "redirect", wr->redirect); + jk_print_xml_att_string(s, 8, "domain", wr->domain); + jk_print_xml_att_int(s, 8, "distance", wr->distance); jk_print_xml_att_string(s, 8, "state", jk_lb_get_state(wr, l)); - jk_print_xml_att_uint64(s, 8, "lbmult", wr->s->lb_mult); + jk_print_xml_att_uint64(s, 8, "lbmult", wr->lb_mult); jk_print_xml_att_uint64(s, 8, "lbvalue", wr->s->lb_value); jk_print_xml_att_uint64(s, 8, "elected", wr->s->elected); jk_print_xml_att_uint32(s, 8, "errors", wr->s->errors); @@ -1733,19 +1733,19 @@ else if (mime == JK_STATUS_MIME_TXT) { jk_puts(s, "Member:"); - jk_printf(s, " name=%s", wr->s->name); + jk_printf(s, " name=%s", wr->name); jk_printf(s, " type=%s", status_worker_type(wr->w->type)); jk_printf(s, " host=%s", a->host); jk_printf(s, " port=%d", a->port); jk_printf(s, " address=%s", jk_dump_hinfo(&a->worker_inet_addr, buf)); jk_printf(s, " activation=%s", jk_lb_get_activation(wr, l)); - jk_printf(s, " lbfactor=%d", wr->s->lb_factor); - jk_printf(s, " route=\"%s\"", wr->s->route ? wr->s->route : ""); - jk_printf(s, " redirect=\"%s\"", wr->s->redirect ? wr->s->redirect : ""); - jk_printf(s, " domain=\"%s\"", wr->s->domain ? wr->s->domain : ""); - jk_printf(s, " distance=%d", wr->s->distance); + jk_printf(s, " lbfactor=%d", wr->lb_factor); + jk_printf(s, " route=\"%s\"", wr->route ? wr->route : ""); + jk_printf(s, " redirect=\"%s\"", wr->redirect ? wr->redirect : ""); + jk_printf(s, " domain=\"%s\"", wr->domain ? wr->domain : ""); + jk_printf(s, " distance=%d", wr->distance); jk_printf(s, " state=%s", jk_lb_get_state(wr, l)); - jk_printf(s, " lbmult=%" JK_UINT64_T_FMT, wr->s->lb_mult); + jk_printf(s, " lbmult=%" JK_UINT64_T_FMT, wr->lb_mult); jk_printf(s, " lbvalue=%" JK_UINT64_T_FMT, wr->s->lb_value); jk_printf(s, " elected=%" JK_UINT64_T_FMT, wr->s->elected); jk_printf(s, " errors=%" JK_UINT32_T_FMT, wr->s->errors); @@ -1762,30 +1762,30 @@ } else if (mime == JK_STATUS_MIME_PROP) { - jk_print_prop_att_string(s, w, name, "balance_workers", wr->s->name); - jk_print_prop_att_string(s, w, wr->s->name, "type", status_worker_type(wr->w->type)); - jk_print_prop_att_string(s, w, wr->s->name, "host", a->host); - jk_print_prop_att_int(s, w, wr->s->name, "port", a->port); - jk_print_prop_att_string(s, w, wr->s->name, "address", jk_dump_hinfo(&a->worker_inet_addr, buf)); - jk_print_prop_att_string(s, w, wr->s->name, "activation", jk_lb_get_activation(wr, l)); - jk_print_prop_att_int(s, w, wr->s->name, "lbfactor", wr->s->lb_factor); - jk_print_prop_att_string(s, w, wr->s->name, "route", wr->s->route); - jk_print_prop_att_string(s, w, wr->s->name, "redirect", wr->s->redirect); - jk_print_prop_att_string(s, w, wr->s->name, "domain", wr->s->domain); - jk_print_prop_att_int(s, w, wr->s->name, "distance", wr->s->distance); - jk_print_prop_att_string(s, w, wr->s->name, "state", jk_lb_get_state(wr, l)); - jk_print_prop_att_uint64(s, w, wr->s->name, "lbmult", wr->s->lb_mult); - jk_print_prop_att_uint64(s, w, wr->s->name, "lbvalue", wr->s->lb_value); - jk_print_prop_att_uint64(s, w, wr->s->name, "elected", wr->s->elected); - jk_print_prop_att_uint32(s, w, wr->s->name, "errors", wr->s->errors); - jk_print_prop_att_uint32(s, w, wr->s->name, "client_errors", wr->s->client_errors); - jk_print_prop_att_uint32(s, w, wr->s->name, "reply_timeouts", wr->s->reply_timeouts); - jk_print_prop_att_uint64(s, w, wr->s->name, "transferred", wr->s->transferred); - jk_print_prop_att_uint64(s, w, wr->s->name, "read", wr->s->readed); - jk_print_prop_att_int(s, w, wr->s->name, "busy", wr->s->busy); - jk_print_prop_att_int(s, w, wr->s->name, "max_busy", wr->s->max_busy); - jk_print_prop_att_int(s, w, wr->s->name, "time_to_recover_min", rs_min); - jk_print_prop_att_int(s, w, wr->s->name, "time_to_recover_max", rs_max); + jk_print_prop_att_string(s, w, name, "balance_workers", wr->name); + jk_print_prop_att_string(s, w, wr->name, "type", status_worker_type(wr->w->type)); + jk_print_prop_att_string(s, w, wr->name, "host", a->host); + jk_print_prop_att_int(s, w, wr->name, "port", a->port); + jk_print_prop_att_string(s, w, wr->name, "address", jk_dump_hinfo(&a->worker_inet_addr, buf)); + jk_print_prop_att_string(s, w, wr->name, "activation", jk_lb_get_activation(wr, l)); + jk_print_prop_att_int(s, w, wr->name, "lbfactor", wr->lb_factor); + jk_print_prop_att_string(s, w, wr->name, "route", wr->route); + jk_print_prop_att_string(s, w, wr->name, "redirect", wr->redirect); + jk_print_prop_att_string(s, w, wr->name, "domain", wr->domain); + jk_print_prop_att_int(s, w, wr->name, "distance", wr->distance); + jk_print_prop_att_string(s, w, wr->name, "state", jk_lb_get_state(wr, l)); + jk_print_prop_att_uint64(s, w, wr->name, "lbmult", wr->lb_mult); + jk_print_prop_att_uint64(s, w, wr->name, "lbvalue", wr->s->lb_value); + jk_print_prop_att_uint64(s, w, wr->name, "elected", wr->s->elected); + jk_print_prop_att_uint32(s, w, wr->name, "errors", wr->s->errors); + jk_print_prop_att_uint32(s, w, wr->name, "client_errors", wr->s->client_errors); + jk_print_prop_att_uint32(s, w, wr->name, "reply_timeouts", wr->s->reply_timeouts); + jk_print_prop_att_uint64(s, w, wr->name, "transferred", wr->s->transferred); + jk_print_prop_att_uint64(s, w, wr->name, "read", wr->s->readed); + jk_print_prop_att_int(s, w, wr->name, "busy", wr->s->busy); + jk_print_prop_att_int(s, w, wr->name, "max_busy", wr->s->max_busy); + jk_print_prop_att_int(s, w, wr->name, "time_to_recover_min", rs_min); + jk_print_prop_att_int(s, w, wr->name, "time_to_recover_max", rs_max); } } @@ -1948,7 +1948,7 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' %s lb worker '%s'", - w->name, "displaying", lb->s->name); + w->name, "displaying", lb->name); display_worker_lb(s, p, lb, l); } else { @@ -1995,7 +1995,7 @@ JK_TRACE_ENTER(l); if (jw->type == JK_LB_WORKER_TYPE) { lb = (lb_worker_t *)jw->worker_private; - name = lb->s->name; + name = lb->name; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' producing edit form for lb worker '%s'", @@ -2109,10 +2109,10 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' producing edit form for sub worker '%s' of lb worker '%s'", - w->name, wr->s->name, lb_name); + w->name, wr->name, lb_name); jk_putv(s, "<hr/><h3>Edit worker settings for ", - wr->s->name, "</h3>\n", NULL); + wr->name, "</h3>\n", NULL); status_start_form(s, p, "get", JK_STATUS_CMD_UPDATE, l); jk_puts(s, "<table>\n"); @@ -2121,43 +2121,43 @@ jk_putv(s, "<tr><td> Active</td><td><input name=\"", JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_ACTIVE); - if (wr->s->activation == JK_LB_ACTIVATION_ACTIVE) + if (wr->activation == JK_LB_ACTIVATION_ACTIVE) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/></td></tr>\n"); jk_putv(s, "<tr><td> Disabled</td><td><input name=\"", JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_DISABLED); - if (wr->s->activation == JK_LB_ACTIVATION_DISABLED) + if (wr->activation == JK_LB_ACTIVATION_DISABLED) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/></td></tr>\n"); jk_putv(s, "<tr><td> Stopped</td><td><input name=\"", JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_STOPPED); - if (wr->s->activation == JK_LB_ACTIVATION_STOPPED) + if (wr->activation == JK_LB_ACTIVATION_STOPPED) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/></td></tr>\n"); jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_FACTOR, ":</td><td><input name=\"", JK_STATUS_ARG_LBM_FACTOR, "\" type=\"text\" ", NULL); - jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->s->lb_factor); + jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->lb_factor); jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_ROUTE, ":</td><td><input name=\"", JK_STATUS_ARG_LBM_ROUTE, "\" type=\"text\" ", NULL); - jk_printf(s, "value=\"%s\"/></td></tr>\n", wr->s->route); + jk_printf(s, "value=\"%s\"/></td></tr>\n", wr->route); jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_REDIRECT, ":</td><td><input name=\"", JK_STATUS_ARG_LBM_REDIRECT, "\" type=\"text\" ", NULL); - jk_putv(s, "value=\"", wr->s->redirect, NULL); + jk_putv(s, "value=\"", wr->redirect, NULL); jk_puts(s, "\"/></td></tr>\n"); jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_DOMAIN, ":</td><td><input name=\"", JK_STATUS_ARG_LBM_DOMAIN, "\" type=\"text\" ", NULL); - jk_putv(s, "value=\"", wr->s->domain, NULL); + jk_putv(s, "value=\"", wr->domain, NULL); jk_puts(s, "\"/></td></tr>\n"); jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_DISTANCE, ":</td><td><input name=\"", JK_STATUS_ARG_LBM_DISTANCE, "\" type=\"text\" ", NULL); - jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->s->distance); + jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->distance); jk_puts(s, "</table>\n"); jk_puts(s, "<br/><input type=\"submit\" value=\"Update Worker\"/>\n</form>\n"); JK_TRACE_EXIT(l); @@ -2206,7 +2206,7 @@ } if (jw->type == JK_LB_WORKER_TYPE) { lb = (lb_worker_t *)jw->worker_private; - name = lb->s->name; + name = lb->name; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' producing edit form for attribute '%s' [%s] of all members of lb worker '%s'", @@ -2234,46 +2234,46 @@ for (i = 0; i < lb->num_of_workers; i++) { worker_record_t *wr = &(lb->lb_workers[i]); - jk_putv(s, "<tr><td>", wr->s->name, "</td><td>\n", NULL); + jk_putv(s, "<tr><td>", wr->name, "</td><td>\n", NULL); if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) { jk_printf(s, "Active: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_ACTIVE); - if (wr->s->activation == JK_LB_ACTIVATION_ACTIVE) + if (wr->activation == JK_LB_ACTIVATION_ACTIVE) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/> | \n"); jk_printf(s, "Disabled: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_DISABLED); - if (wr->s->activation == JK_LB_ACTIVATION_DISABLED) + if (wr->activation == JK_LB_ACTIVATION_DISABLED) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/> | \n"); jk_printf(s, "Stopped: <input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i); jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_STOPPED); - if (wr->s->activation == JK_LB_ACTIVATION_STOPPED) + if (wr->activation == JK_LB_ACTIVATION_STOPPED) jk_puts(s, " checked=\"checked\""); jk_puts(s, "/>\n"); } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) { jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i); - jk_printf(s, "value=\"%d\"/>\n", wr->s->lb_factor); + jk_printf(s, "value=\"%d\"/>\n", wr->lb_factor); } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE)) { jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i); - jk_putv(s, "value=\"", wr->s->route, "\"/>\n", NULL); + jk_putv(s, "value=\"", wr->route, "\"/>\n", NULL); } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT)) { jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i); - jk_putv(s, "value=\"", wr->s->redirect, "\"/>\n", NULL); + jk_putv(s, "value=\"", wr->redirect, "\"/>\n", NULL); } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN)) { jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i); - jk_putv(s, "value=\"", wr->s->domain, "\"/>\n", NULL); + jk_putv(s, "value=\"", wr->domain, "\"/>\n", NULL); } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE)) { jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i); - jk_printf(s, "value=\"%d\"/>\n", wr->s->distance); + jk_printf(s, "value=\"%d\"/>\n", wr->distance); } jk_puts(s, "</td></tr>"); @@ -2299,7 +2299,7 @@ JK_TRACE_ENTER(l); if (jw->type == JK_LB_WORKER_TYPE) { lb = (lb_worker_t *)jw->worker_private; - name = lb->s->name; + name = lb->name; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' committing changes for lb worker '%s'", @@ -2400,40 +2400,40 @@ if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' committing changes for sub worker '%s' of lb worker '%s'", - w->name, wr->s->name, lb_name); + w->name, wr->name, lb_name); if (status_get_string(p, JK_STATUS_ARG_LBM_ACTIVATION, NULL, &arg, l) == JK_TRUE) { i = jk_lb_get_activation_code(arg); - if (i != wr->s->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) { - wr->s->activation = i; + if (i != wr->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) { + wr->activation = i; jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'activation' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, lb_name, jk_lb_get_activation(wr, l)); + w->name, wr->name, lb_name, jk_lb_get_activation(wr, l)); rc |= 1; } } i = status_get_int(p, JK_STATUS_ARG_LBM_FACTOR, - wr->s->lb_factor, l); - if (i != wr->s->lb_factor && i > 0) { + wr->lb_factor, l); + if (i != wr->lb_factor && i > 0) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'lbfactor' for sub worker '%s' of lb worker '%s' to '%i'", - w->name, wr->s->name, lb_name, i); - wr->s->lb_factor = i; + w->name, wr->name, lb_name, i); + wr->lb_factor = i; /* Recalculate the load multiplicators wrt. lb_factor */ rc |= 2; } if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_ROUTE, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->s->route, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->route, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'route' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, lb_name, arg); - strncpy(wr->s->route, arg, JK_SHM_STR_SIZ); - if (!wr->s->domain[0]) { - char * id_domain = strchr(wr->s->route, '.'); + w->name, wr->name, lb_name, arg); + strncpy(wr->route, arg, JK_SHM_STR_SIZ); + if (!wr->domain[0]) { + char * id_domain = strchr(wr->route, '.'); if (id_domain) { *id_domain = '\0'; - strcpy(wr->s->domain, wr->s->route); + strcpy(wr->domain, wr->route); *id_domain = '.'; } } @@ -2441,30 +2441,31 @@ } if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_REDIRECT, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->s->redirect, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'redirect' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, lb_name, arg); - strncpy(wr->s->redirect, arg, JK_SHM_STR_SIZ); + w->name, wr->name, lb_name, arg); + strncpy(wr->redirect, arg, JK_SHM_STR_SIZ); } } if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_DOMAIN, NULL, &arg, l)) == JK_TRUE) { - if (strncmp(wr->s->domain, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'domain' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, lb_name, arg); - strncpy(wr->s->domain, arg, JK_SHM_STR_SIZ); + w->name, wr->name, lb_name, arg); + strncpy(wr->domain, arg, JK_SHM_STR_SIZ); } } i = status_get_int(p, JK_STATUS_ARG_LBM_DISTANCE, - wr->s->distance, l); - if (i != wr->s->distance && i > 0) { + wr->distance, l); + if (i != wr->distance && i > 0) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'distance' for sub worker '%s' of lb worker '%s' to '%i'", - w->name, wr->s->name, lb_name, i); - wr->s->distance = i; + w->name, wr->name, lb_name, i); + wr->distance = i; } + wr->sequence++; return rc; } @@ -2515,7 +2516,7 @@ } if (jw->type == JK_LB_WORKER_TYPE) { lb = (lb_worker_t *)jw->worker_private; - name = lb->s->name; + name = lb->name; if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "Status worker '%s' committing changes for attribute '%s' [%s] of all members of lb worker '%s'", @@ -2535,22 +2536,22 @@ snprintf(vname, 32-1, "" JK_STATUS_ARG_MULT_VALUE_BASE "%d", j); if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) { - i = status_get_int(p, vname, wr->s->lb_factor, l); - if (i != wr->s->lb_factor && i > 0) { + i = status_get_int(p, vname, wr->lb_factor, l); + if (i != wr->lb_factor && i > 0) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'lbfactor' for sub worker '%s' of lb worker '%s' to '%i'", - w->name, wr->s->name, name, i); - wr->s->lb_factor = i; + w->name, wr->name, name, i); + wr->lb_factor = i; rc = 2; } } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE)) { - i = status_get_int(p, vname, wr->s->distance, l); - if (i != wr->s->distance && i > 0) { + i = status_get_int(p, vname, wr->distance, l); + if (i != wr->distance && i > 0) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'distance' for sub worker '%s' of lb worker '%s' to '%i'", - w->name, wr->s->name, name, i); - wr->s->lb_factor = i; + w->name, wr->name, name, i); + wr->lb_factor = i; } } else { @@ -2558,27 +2559,27 @@ if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) { if (rv == JK_TRUE) { i = jk_lb_get_activation_code(arg); - if (i != wr->s->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) { - wr->s->activation = i; + if (i != wr->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) { + wr->activation = i; jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'activation' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, name, jk_lb_get_activation(wr, l)); + w->name, wr->name, name, jk_lb_get_activation(wr, l)); rc = 1; } } } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE)) { if (rv == JK_TRUE) { - if (strncmp(wr->s->route, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->route, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'route' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, name, arg); - strncpy(wr->s->route, arg, JK_SHM_STR_SIZ); - if (!wr->s->domain[0]) { - char * id_domain = strchr(wr->s->route, '.'); + w->name, wr->name, name, arg); + strncpy(wr->route, arg, JK_SHM_STR_SIZ); + if (!wr->domain[0]) { + char * id_domain = strchr(wr->route, '.'); if (id_domain) { *id_domain = '\0'; - strcpy(wr->s->domain, wr->s->route); + strcpy(wr->domain, wr->route); *id_domain = '.'; } } @@ -2587,31 +2588,34 @@ } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT)) { if (rv == JK_TRUE) { - if (strncmp(wr->s->redirect, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'redirect' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, name, arg); - strncpy(wr->s->redirect, arg, JK_SHM_STR_SIZ); + w->name, wr->name, name, arg); + strncpy(wr->redirect, arg, JK_SHM_STR_SIZ); } } } else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN)) { if (rv == JK_TRUE) { - if (strncmp(wr->s->domain, arg, JK_SHM_STR_SIZ)) { + if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ)) { jk_log(l, JK_LOG_INFO, "Status worker '%s' setting 'domain' for sub worker '%s' of lb worker '%s' to '%s'", - w->name, wr->s->name, name, arg); - strncpy(wr->s->domain, arg, JK_SHM_STR_SIZ); + w->name, wr->name, name, arg); + strncpy(wr->domain, arg, JK_SHM_STR_SIZ); } } } } + wr->sequence++; } if (rc == 1) reset_lb_values(lb, l); else if (rc == 2) /* Recalculate the load multiplicators wrt. lb_factor */ update_mult(lb, l); + lb->sequence++; + jk_lb_push(lb, l); } JK_TRACE_EXIT(l); } @@ -2987,7 +2991,9 @@ JK_TRACE_EXIT(l); return JK_FALSE; } - rc = commit_member(s, p, wr, lb->s->name, l); + rc = commit_member(s, p, wr, lb->name, l); + lb->sequence++; + jk_lb_push(lb, l); if (rc & 1) reset_lb_values(lb, l); if (rc & 2) Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=610623&r1=610622&r2=610623&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Wed Jan 9 16:52:57 2008 @@ -44,6 +44,10 @@ <subsection name="Native"> <changelog> <update> + SHM: Use local copies of read mostly attributes of lb sub workers + in lb and status worker. (rjung) + </update> + <update> Status: Add "dump" action to dump our initial configuration. (rjung) </update> <update> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]