Author: mturk Date: Thu Feb 19 12:55:05 2009 New Revision: 745842 URL: http://svn.apache.org/viewvc?rev=745842&view=rev Log: Allow dynamic worker address change
Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c tomcat/connectors/trunk/jk/native/common/jk_service.h tomcat/connectors/trunk/jk/native/common/jk_shm.h tomcat/connectors/trunk/jk/native/common/jk_status.c tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original) +++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Thu Feb 19 12:55:05 2009 @@ -3211,7 +3211,11 @@ } #if JK_NEED_SET_MUTEX_PERMS +#if (MODULE_MAGIC_NUMBER_MAJOR >= 20090208) + rv = ap_unixd_set_global_mutex_perms(jk_log_lock); +#else rv = unixd_set_global_mutex_perms(jk_log_lock); +#endif if (rv != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_CRIT, rv, s, "mod_jk: Could not set permissions on " Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Thu Feb 19 12:55:05 2009 @@ -2167,6 +2167,18 @@ jk_shm_lock(); if (aw->sequence != aw->s->h.sequence) jk_ajp_pull(aw, l); + if (aw->addr_sequence != aw->s->addr_sequence) { + aw->addr_sequence = aw->s->addr_sequence; + aw->host = aw->s->hostname; + aw->port = aw->s->port; + if (!jk_resolve(aw->host, aw->port, &aw->worker_inet_addr, + aw->worker.we->pool, l)) { + if (is_error) + *is_error = JK_HTTP_SERVER_ERROR; + JK_TRACE_EXIT(l); + return JK_FALSE; + } + } jk_shm_unlock(); aw->s->used++; @@ -2464,24 +2476,39 @@ ajp_worker_t *p = pThis->worker_private; p->port = jk_get_worker_port(props, p->name, port); p->host = jk_get_worker_host(props, p->name, host); + if (!p->host) { + p->host = "undefined"; + } if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "worker %s contact is '%s:%d'", p->name, p->host, p->port); - -/* XXX: Why do we only resolve, if port > 1024 ? */ + /* Copy the contact to shm */ + strncpy(p->s->hostname, p->host, JK_SHM_STR_SIZ); + p->s->port = p->port; + /* Resolve if port > 1024. + * + */ if (p->port > 1024) { if (jk_resolve(p->host, p->port, &p->worker_inet_addr, we->pool, l)) { + p->s->addr_sequence = p->addr_sequence = 1; JK_TRACE_EXIT(l); return JK_TRUE; } jk_log(l, JK_LOG_ERROR, - "can't resolve tomcat address %s", p->host); + "worker %s can't resolve tomcat address %s", + p->name, p->host); + } + else { + p->s->port = p->port = 0; + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "worker %s contact is disabled", + p->name, p->host, p->port); + JK_TRACE_EXIT(l); + return JK_TRUE; } - jk_log(l, JK_LOG_ERROR, - "invalid host and port %s %d", - ((p->host == NULL) ? "NULL" : p->host), p->port); } else { JK_LOG_NULL_PARAMS(l); @@ -2548,6 +2575,7 @@ if (pThis && pThis->worker_private) { ajp_worker_t *p = pThis->worker_private; + p->worker.we = we; p->ep_cache_sz = jk_get_worker_cache_size(props, p->name, cache); p->ep_mincache_sz = jk_get_worker_cache_size_min(props, p->name, (p->ep_cache_sz+1) / 2); Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Thu Feb 19 12:55:05 2009 @@ -275,6 +275,7 @@ unsigned connect_retry_attempts; const char *host; int port; + int addr_sequence; /* Wather the address is resolved */ int maintain_time; /* * Open connections cache... 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=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Thu Feb 19 12:55:05 2009 @@ -1553,6 +1553,13 @@ if (!aw->secret) aw->secret = secret; } + if (p->lb_workers[i].worker->type == JK_AJP13_WORKER_TYPE || + p->lb_workers[i].worker->type == JK_AJP14_WORKER_TYPE) { + ajp_worker_t *aw = (ajp_worker_t *)p->lb_workers[i].worker->worker_private; + if (!aw->addr_sequence) { + p->lb_workers[i].activation = JK_LB_ACTIVATION_STOPPED; + } + } } if (i != num_of_workers) { @@ -1618,6 +1625,7 @@ lb_worker_t *p = (lb_worker_t *)pThis->worker_private; JK_TRACE_ENTER(log); + p->worker.we = we; p->retries = jk_get_worker_retries(props, p->name, JK_RETRIES); p->retry_interval = Modified: tomcat/connectors/trunk/jk/native/common/jk_service.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_service.h?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_service.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_service.h Thu Feb 19 12:55:05 2009 @@ -449,6 +449,8 @@ struct jk_worker { + jk_worker_env_t *we; + /* * A 'this' pointer which is used by the subclasses of this class to * point to data/functions which are specific to a given protocol Modified: tomcat/connectors/trunk/jk/native/common/jk_shm.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_shm.h?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_shm.h (original) +++ tomcat/connectors/trunk/jk/native/common/jk_shm.h Thu Feb 19 12:55:05 2009 @@ -78,6 +78,9 @@ struct jk_shm_ajp_worker { jk_shm_worker_header_t h; + char hostname[JK_SHM_STR_SIZ+1]; + unsigned int port; + volatile int addr_sequence; /* Configuration data mirrored from ajp_worker */ int cache_timeout; 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=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_status.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_status.c Thu Feb 19 12:55:05 2009 @@ -116,6 +116,8 @@ #define JK_STATUS_ARG_AJP_REC_OPTS "varo" #define JK_STATUS_ARG_AJP_MAX_PK_SZ "vamps" #define JK_STATUS_ARG_AJP_CPING_INT "vacpi" +#define JK_STATUS_ARG_AJP_HOST_STR "vaddr" +#define JK_STATUS_ARG_AJP_PORT_INT "vaprt" #define JK_STATUS_ARG_AJP_TEXT_CACHE_TO "Connection Pool Timeout" #define JK_STATUS_ARG_AJP_TEXT_PING_TO "Ping Timeout" @@ -127,6 +129,8 @@ #define JK_STATUS_ARG_AJP_TEXT_REC_OPTS "Recovery Options" #define JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "Max Packet Size" #define JK_STATUS_ARG_AJP_TEXT_CPING_INT "Connection Ping Interval" +#define JK_STATUS_ARG_AJP_TEXT_HOST_STR "Hostname" +#define JK_STATUS_ARG_AJP_TEXT_PORT_INT "Port" #define JK_STATUS_CMD_UNKNOWN (0) #define JK_STATUS_CMD_LIST (1) @@ -223,7 +227,7 @@ #define JK_STATUS_URI_MAP_TABLE_ROW2 "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n" #define JK_STATUS_SHOW_AJP_CONF_HEAD "<tr>" \ "<th>Type</th>" \ - "<th>Host</th><th>Addr</th>" \ + "<th>" JK_STATUS_ARG_AJP_TEXT_HOST_STR "</th><th>Addr</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_CACHE_TO "</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "</th>" \ @@ -316,7 +320,7 @@ "</tr>\n" #define JK_STATUS_SHOW_MEMBER_CONF_HEAD "<tr>" \ "<th>Name</th><th>Type</th>" \ - "<th>Host</th><th>Addr</th>" \ + "<th>" JK_STATUS_ARG_AJP_TEXT_HOST_STR "</th><th>Addr</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_CACHE_TO "</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "</th>" \ "<th>" JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "</th>" \ @@ -2643,6 +2647,15 @@ } jk_puts(s, "<table>\n"); + jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_HOST_STR, + ":</td><td><input name=\"", + JK_STATUS_ARG_AJP_HOST_STR, "\" type=\"text\" ", NULL); + jk_printf(s, "value=\"%s\"/></td></tr>\n", aw->s->hostname); + jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_PORT_INT, + ":</td><td><input name=\"", + JK_STATUS_ARG_AJP_PORT_INT, "\" type=\"text\" ", NULL); + jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->s->port); + jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_CACHE_TO, ":</td><td><input name=\"", JK_STATUS_ARG_AJP_CACHE_TO, "\" type=\"text\" ", NULL); @@ -3059,6 +3072,7 @@ int rv; int i; int old; + int as = 0; JK_TRACE_ENTER(l); if (lb) { @@ -3145,6 +3159,23 @@ } } } + if ((rv = status_get_string(p, JK_STATUS_ARG_AJP_HOST_STR, + NULL, &arg, l)) == JK_TRUE) { + if (strncmp(aw->s->hostname, arg, JK_SHM_STR_SIZ)) { + jk_log(l, JK_LOG_INFO, + "Status worker '%s' setting 'host' for sub worker '%s' to '%s'", + w->name, aw->name, arg); + strncpy(aw->s->hostname, arg, JK_SHM_STR_SIZ); + rc |= 4; + as = 1; + } + } + if (set_int_if_changed(p, aw->name, "port", JK_STATUS_ARG_AJP_PORT_INT, + 0, INT_MAX, &aw->s->port, lb_name, l)) { + rc |= 4; + as = 1; + } + aw->s->addr_sequence += as; if (set_int_if_changed(p, aw->name, "ping_timeout", JK_STATUS_ARG_AJP_PING_TO, 0, INT_MAX, &aw->ping_timeout, lb_name, l)) rc |= 4; Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=745842&r1=745841&r2=745842&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Thu Feb 19 12:55:05 2009 @@ -44,6 +44,11 @@ <subsection name="Native"> <changelog> <update> + AJP: Allow changing worker address via jkstatus + manager. The address is resolved on next request + for that worker. (mturk) + </update> + <update> LB: If the sticky session affinity mark contains dot, treat the part after the dot as domain name. This allows to have full node session affinity with domain failover. (mturk) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org