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: [email protected]
For additional commands, e-mail: [email protected]