You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2008/01/14 02:04:07 UTC
svn commit: r611689 - in /tomcat/connectors/trunk/jk:
native/common/jk_status.c xdocs/miscellaneous/changelog.xml
xdocs/reference/status.xml
Author: rjung
Date: Sun Jan 13 17:04:06 2008
New Revision: 611689
URL: http://svn.apache.org/viewvc?rev=611689&view=rev
Log:
Add manageability for ajp parameters of ajp
workers and ajp lb members to status worker.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_status.c
tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
tomcat/connectors/trunk/jk/xdocs/reference/status.xml
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=611689&r1=611688&r2=611689&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sun Jan 13 17:04:06 2008
@@ -72,6 +72,7 @@
#define JK_STATUS_ARG_OPTION_READ_ONLY 0x0020
#define JK_STATUS_ARG_OPTION_NO_LB_CONF 0x0040
#define JK_STATUS_ARG_OPTION_NO_LB_SUMMARY 0x0080
+#define JK_STATUS_ARG_OPTION_NO_AJP_CONF 0x0100
#define JK_STATUS_ARG_LB_RETRIES ("vlr")
#define JK_STATUS_ARG_LB_RECOVER_TIME ("vlt")
@@ -103,6 +104,22 @@
#define JK_STATUS_ARG_LBM_TEXT_DOMAIN "Cluster Domain"
#define JK_STATUS_ARG_LBM_TEXT_DISTANCE "Distance"
+#define JK_STATUS_ARG_AJP_CACHE_TO "vacpt"
+#define JK_STATUS_ARG_AJP_CONNECT_TO "vact"
+#define JK_STATUS_ARG_AJP_PREPOST_TO "vapt"
+#define JK_STATUS_ARG_AJP_REPLY_TO "vart"
+#define JK_STATUS_ARG_AJP_RETRIES "var"
+#define JK_STATUS_ARG_AJP_REC_OPTS "varo"
+#define JK_STATUS_ARG_AJP_MAX_PK_SZ "vamps"
+
+#define JK_STATUS_ARG_AJP_TEXT_CACHE_TO "Connection Pool Timeout"
+#define JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "Connect Timeout"
+#define JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "Prepost Timeout"
+#define JK_STATUS_ARG_AJP_TEXT_REPLY_TO "Reply Timeout"
+#define JK_STATUS_ARG_AJP_TEXT_RETRIES "Retries"
+#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_CMD_UNKNOWN (0)
#define JK_STATUS_CMD_LIST (1)
#define JK_STATUS_CMD_SHOW (2)
@@ -196,9 +213,30 @@
#define JK_STATUS_URI_MAP_TABLE_ROW "<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n"
#define JK_STATUS_URI_MAP_TABLE_HEAD2 "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
#define JK_STATUS_URI_MAP_TABLE_ROW2 "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n"
-#define JK_STATUS_SHOW_AJP_HEAD "<tr>" \
+#define JK_STATUS_SHOW_AJP_CONF_HEAD "<tr>" \
"<th>Type</th>" \
"<th>Host</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>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_REPLY_TO "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_RETRIES "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_REC_OPTS "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "</th>" \
+ "<th>\n"
+#define JK_STATUS_SHOW_AJP_CONF_ROW "<tr>" \
+ "<td>%s</td>" \
+ "<td>%s:%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%u</td>" \
+ "<td>%u</td>" \
+ "<td></td>" \
+ "</tr>\n"
+#define JK_STATUS_SHOW_AJP_HEAD "<tr>" \
"<th>State</th>" \
"<th>Acc</th>" \
"<th>Err</th><th>CE</th><th>RE</th>" \
@@ -206,9 +244,6 @@
"</tr>\n"
#define JK_STATUS_SHOW_AJP_ROW "<tr>" \
"<td>%s</td>" \
- "<td>%s:%d</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
"<td>%" JK_UINT64_T_FMT "</td>" \
"<td>%" JK_UINT32_T_FMT "</td>" \
"<td>%" JK_UINT32_T_FMT "</td>" \
@@ -240,8 +275,7 @@
"<td></td>" \
"</tr>\n"
#define JK_STATUS_SHOW_MEMBER_HEAD "<tr>" \
- "<th> </th><th>Name</th><th>Type</th>" \
- "<th>Host</th><th>Addr</th>" \
+ "<th> </th><th>Name</th>" \
"<th>Act</th><th>State</th>" \
"<th>D</th><th>F</th><th>M</th>" \
"<th>V</th><th>Acc</th>" \
@@ -252,9 +286,6 @@
"</tr>\n"
#define JK_STATUS_SHOW_MEMBER_ROW "<td>%s</td>" \
"<td>%s</td>" \
- "<td>%s:%d</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
"<td>%s</td>" \
"<td>%d</td>" \
"<td>%d</td>" \
@@ -273,6 +304,31 @@
"<td>%s</td>" \
"<td>%d/%d</td>" \
"</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_CACHE_TO "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_REPLY_TO "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_RETRIES "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_REC_OPTS "</th>" \
+ "<th>" JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "</th>" \
+ "<th>\n"
+#define JK_STATUS_SHOW_MEMBER_CONF_ROW "<tr>" \
+ "<td>%s</td>" \
+ "<td>%s</td>" \
+ "<td>%s:%d</td>" \
+ "<td>%s</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%d</td>" \
+ "<td>%u</td>" \
+ "<td>%u</td>" \
+ "<td></td>" \
+ "</tr>\n"
typedef struct status_worker status_worker_t;
@@ -1473,6 +1529,46 @@
JK_TRACE_EXIT(l);
}
+static void display_worker_ajp_conf_details(jk_ws_service_t *s,
+ status_endpoint_t *p,
+ ajp_worker_t *aw,
+ int is_member,
+ int type,
+ jk_logger_t *l)
+{
+ char buf[32];
+
+ JK_TRACE_ENTER(l);
+
+ if (is_member)
+ jk_printf(s, JK_STATUS_SHOW_MEMBER_CONF_ROW,
+ aw->name,
+ status_worker_type(type),
+ aw->host, aw->port,
+ jk_dump_hinfo(&aw->worker_inet_addr, buf),
+ aw->cache_timeout,
+ aw->connect_timeout,
+ aw->prepost_timeout,
+ aw->reply_timeout,
+ aw->retries,
+ aw->recovery_opts,
+ aw->max_packet_size);
+ else
+ jk_printf(s, JK_STATUS_SHOW_AJP_CONF_ROW,
+ status_worker_type(type),
+ aw->host, aw->port,
+ jk_dump_hinfo(&aw->worker_inet_addr, buf),
+ aw->cache_timeout,
+ aw->connect_timeout,
+ aw->prepost_timeout,
+ aw->reply_timeout,
+ aw->retries,
+ aw->recovery_opts,
+ aw->max_packet_size);
+ JK_TRACE_EXIT(l);
+
+}
+
static void display_worker_ajp_details(jk_ws_service_t *s,
status_endpoint_t *p,
ajp_worker_t *aw,
@@ -1527,9 +1623,6 @@
if (lb)
jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW,
sub_name,
- status_worker_type(wr->worker->type),
- aw->host, aw->port,
- jk_dump_hinfo(&aw->worker_inet_addr, buf),
jk_lb_get_activation(wr, l),
jk_lb_get_state(wr, l),
wr->distance,
@@ -1551,9 +1644,6 @@
rs_max);
else
jk_printf(s, JK_STATUS_SHOW_AJP_ROW,
- status_worker_type(aw->worker.type),
- aw->host, aw->port,
- jk_dump_hinfo(&aw->worker_inet_addr, buf),
jk_ajp_get_state(aw, l),
aw->s->used,
aw->s->errors,
@@ -1583,6 +1673,13 @@
jk_print_xml_att_string(s, off+2, "host", aw->host);
jk_print_xml_att_int(s, off+2, "port", aw->port);
jk_print_xml_att_string(s, off+2, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
+ jk_print_xml_att_int(s, off+2, "connection_pool_timeout", aw->cache_timeout);
+ jk_print_xml_att_int(s, off+2, "connect_timeout", aw->connect_timeout);
+ jk_print_xml_att_int(s, off+2, "prepost_timeout", aw->prepost_timeout);
+ jk_print_xml_att_int(s, off+2, "reply_timeout", aw->reply_timeout);
+ jk_print_xml_att_int(s, off+2, "retries", aw->retries);
+ jk_print_xml_att_uint(s, off+2, "recovery_options", aw->recovery_opts);
+ jk_print_xml_att_uint(s, off+2, "max_packet_size", aw->max_packet_size);
if (lb) {
jk_print_xml_att_string(s, off+2, "activation", jk_lb_get_activation(wr, l));
jk_print_xml_att_int(s, off+2, "lbfactor", wr->lb_factor);
@@ -1631,6 +1728,13 @@
jk_printf(s, " host=%s", aw->host);
jk_printf(s, " port=%d", aw->port);
jk_printf(s, " address=%s", jk_dump_hinfo(&aw->worker_inet_addr, buf));
+ jk_printf(s, " connection_pool_timeout=%d", aw->cache_timeout);
+ jk_printf(s, " connect_timeout=%d", aw->connect_timeout);
+ jk_printf(s, " prepost_timeout=%d", aw->prepost_timeout);
+ jk_printf(s, " reply_timeout=%d", aw->reply_timeout);
+ jk_printf(s, " retries=%d", aw->retries);
+ jk_printf(s, " recovery_options=%u", aw->recovery_opts);
+ jk_printf(s, " max_packet_size=%u", aw->max_packet_size);
if (lb) {
jk_printf(s, " activation=%s", jk_lb_get_activation(wr, l));
jk_printf(s, " lbfactor=%d", wr->lb_factor);
@@ -1676,6 +1780,13 @@
jk_print_prop_att_string(s, w, ajp_name, "host", aw->host);
jk_print_prop_att_int(s, w, ajp_name, "port", aw->port);
jk_print_prop_att_string(s, w, ajp_name, "address", jk_dump_hinfo(&aw->worker_inet_addr, buf));
+ jk_print_prop_att_int(s, w, ajp_name, "connection_pool_timeout", aw->cache_timeout);
+ jk_print_prop_att_int(s, w, ajp_name, "connect_timeout", aw->connect_timeout);
+ jk_print_prop_att_int(s, w, ajp_name, "prepost_timeout", aw->prepost_timeout);
+ jk_print_prop_att_int(s, w, ajp_name, "reply_timeout", aw->reply_timeout);
+ jk_print_prop_att_int(s, w, ajp_name, "retries", aw->retries);
+ jk_print_prop_att_uint(s, w, ajp_name, "recovery_options", aw->recovery_opts);
+ jk_print_prop_att_uint(s, w, ajp_name, "max_packet_size", aw->max_packet_size);
if (lb) {
jk_print_prop_att_string(s, w, ajp_name, "activation", jk_lb_get_activation(wr, l));
jk_print_prop_att_int(s, w, ajp_name, "lbfactor", wr->lb_factor);
@@ -1722,6 +1833,7 @@
unsigned int hide_members;
unsigned int hide_lb_conf;
unsigned int hide_lb_summary;
+ unsigned int hide_ajp_conf;
const char *arg;
time_t now = time(NULL);
unsigned int good = 0;
@@ -1746,6 +1858,8 @@
JK_STATUS_ARG_OPTION_NO_LB_CONF;
hide_lb_summary = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
JK_STATUS_ARG_OPTION_NO_LB_SUMMARY;
+ hide_ajp_conf = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+ JK_STATUS_ARG_OPTION_NO_AJP_CONF;
if (w->read_only) {
read_only = 1;
}
@@ -1805,7 +1919,6 @@
}
jk_puts(s, "] ");
jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
-
if (hide_lb_conf) {
pstart = JK_TRUE;
jk_puts(s, "<p>\n");
@@ -1833,6 +1946,21 @@
NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB_SUMMARY, "", l);
}
}
+ if (!hide_members && hide_ajp_conf) {
+ if (pstart == JK_FALSE)
+ jk_puts(s, "<p>\n");
+ else
+ jk_puts(s, " | ");
+ pstart = JK_TRUE;
+ if (single) {
+ status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
+ }
+ else {
+ status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
+ }
+ }
if (hide_members) {
if (pstart == JK_FALSE)
jk_puts(s, "<p>\n");
@@ -1969,6 +2097,20 @@
NULL, NULL, JK_STATUS_ARG_OPTION_NO_MEMBERS, 0, "", l);
}
jk_puts(s, "]</h4>\n");
+ if (!hide_ajp_conf) {
+ jk_puts(s, "<table>" JK_STATUS_SHOW_MEMBER_CONF_HEAD);
+ jk_puts(s, "[");
+ status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, JK_STATUS_ARG_OPTION_NO_AJP_CONF, 0, NULL, l);
+ jk_puts(s, "]</td></tr>");
+ for (j = 0; j < lb->num_of_workers; j++) {
+ lb_sub_worker_t *wr = &(lb->lb_workers[j]);
+ jk_worker_t *jw = (jk_worker_t *)wr->worker;
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
+ display_worker_ajp_conf_details(s, p, aw, 1, jw->type, l);
+ }
+ jk_puts(s, "</table>\n<br/>\n");
+ }
jk_puts(s, "<table>" JK_STATUS_SHOW_MEMBER_HEAD);
}
@@ -2018,6 +2160,13 @@
jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_REDIRECT, "\">", JK_STATUS_ARG_LBM_TEXT_REDIRECT, "</option>\n", NULL);
jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_DOMAIN, "\">", JK_STATUS_ARG_LBM_TEXT_DOMAIN, "</option>\n", NULL);
jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_DISTANCE, "\">", JK_STATUS_ARG_LBM_TEXT_DISTANCE, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_CACHE_TO, "\">", JK_STATUS_ARG_AJP_TEXT_CACHE_TO, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_CONNECT_TO, "\">", JK_STATUS_ARG_AJP_TEXT_CONNECT_TO, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_PREPOST_TO, "\">", JK_STATUS_ARG_AJP_TEXT_PREPOST_TO, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_REPLY_TO, "\">", JK_STATUS_ARG_AJP_TEXT_REPLY_TO, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_RETRIES, "\">", JK_STATUS_ARG_AJP_TEXT_RETRIES, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_REC_OPTS, "\">", JK_STATUS_ARG_AJP_TEXT_REC_OPTS, "</option>\n", NULL);
+ jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_MAX_PK_SZ, "\">", JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ, "</option>\n", NULL);
jk_puts(s, "</select></td><td><input type=\"submit\" value=\"Go\"/></tr></table></form>\n");
}
@@ -2045,6 +2194,7 @@
int mime;
int read_only = 0;
int single = 0;
+ unsigned int hide_ajp_conf;
const char *arg;
int map_count;
const char *name = aw->name;
@@ -2055,6 +2205,8 @@
cmd = status_cmd_int(arg);
status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
mime = status_mime_int(arg);
+ hide_ajp_conf = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+ JK_STATUS_ARG_OPTION_NO_AJP_CONF;
if (w->read_only) {
read_only = 1;
}
@@ -2091,6 +2243,27 @@
}
jk_puts(s, "] ");
jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
+ if (!hide_ajp_conf) {
+ jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_CONF_HEAD);
+ jk_puts(s, "[");
+ status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, JK_STATUS_ARG_OPTION_NO_AJP_CONF, 0, NULL, l);
+ jk_puts(s, "]</td></tr>");
+ display_worker_ajp_conf_details(s, p, aw, 0, type, l);
+ jk_puts(s, "</table>\n<br/>\n");
+ }
+ else {
+ jk_puts(s, "<p>\n");
+ if (single) {
+ status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
+ }
+ else {
+ status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
+ NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
+ }
+ jk_puts(s, "</p>\n");
+ }
jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_HEAD);
}
display_worker_ajp_details(s, p, aw, NULL, NULL, 0, 0, map_count, l);
@@ -2265,6 +2438,7 @@
static void form_member(jk_ws_service_t *s,
status_endpoint_t *p,
lb_sub_worker_t *wr,
+ ajp_worker_t *aw,
const char *lb_name,
jk_logger_t *l)
{
@@ -2275,14 +2449,17 @@
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->name, lb_name);
+ w->name, wr? wr->name : aw->name, lb_name);
jk_putv(s, "<hr/><h3>Edit worker settings for ",
- wr->name, "</h3>\n", NULL);
+ wr? wr->name : aw->name, "</h3>\n", NULL);
status_start_form(s, p, "get", JK_STATUS_CMD_UPDATE, NULL, l);
if (wr) {
- jk_puts(s, "<table>\n");
+ jk_puts(s, "<table><tbody valign=\"baseline\"><tr><th>Balancing related settings</th>\n");
+ jk_puts(s, "<th> </th><th>AJP settings</th>\n");
+ jk_puts(s, "</tr>\n");
+ jk_puts(s, "<tr><td><table>\n");
jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_ACTIVATION,
":</td><td></td></tr>\n", NULL);
jk_putv(s, "<tr><td> Active</td><td><input name=\"",
@@ -2326,7 +2503,41 @@
JK_STATUS_ARG_LBM_DISTANCE, "\" type=\"text\" ", NULL);
jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->distance);
jk_puts(s, "</table>\n");
+ jk_puts(s, "</td><td></td><td>\n");
}
+
+ jk_puts(s, "<table>\n");
+ 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);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->cache_timeout);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_CONNECT_TO,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_CONNECT_TO, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->connect_timeout);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_PREPOST_TO,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_PREPOST_TO, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->prepost_timeout);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_REPLY_TO,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_REPLY_TO, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->reply_timeout);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_RETRIES,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_RETRIES, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->retries);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_REC_OPTS,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_REC_OPTS, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->recovery_opts);
+ jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ,
+ ":</td><td><input name=\"",
+ JK_STATUS_ARG_AJP_MAX_PK_SZ, "\" type=\"text\" ", NULL);
+ jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->max_packet_size);
+ jk_puts(s, "</table>\n");
+ if (wr)
+ jk_puts(s, "</td></tr></table>\n");
jk_puts(s, "<br/><input type=\"submit\" value=\"Update Worker\"/>\n</form>\n");
JK_TRACE_EXIT(l);
}
@@ -2364,6 +2575,20 @@
aname=JK_STATUS_ARG_LBM_TEXT_DOMAIN;
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE))
aname=JK_STATUS_ARG_LBM_TEXT_DISTANCE;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_CACHE_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_CONNECT_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_PREPOST_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_REPLY_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES))
+ aname=JK_STATUS_ARG_AJP_TEXT_RETRIES;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS))
+ aname=JK_STATUS_ARG_AJP_TEXT_REC_OPTS;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ))
+ aname=JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ;
else {
jk_log(l, JK_LOG_WARNING,
"Status worker '%s' unknown attribute '%s'",
@@ -2401,6 +2626,8 @@
for (i = 0; i < lb->num_of_workers; i++) {
lb_sub_worker_t *wr = &(lb->lb_workers[i]);
+ jk_worker_t *jw = wr->worker;
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;;
jk_putv(s, "<tr><td>", wr->name, "</td><td>\n", NULL);
@@ -2443,6 +2670,34 @@
jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
jk_printf(s, "value=\"%d\"/>\n", wr->distance);
}
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->cache_timeout);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->connect_timeout);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->prepost_timeout);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->reply_timeout);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->retries);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->recovery_opts);
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ)) {
+ jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
+ jk_printf(s, "value=\"%d\"/>\n", aw->max_packet_size);
+ }
jk_puts(s, "</td></tr>");
}
@@ -2619,20 +2874,31 @@
status_endpoint_t *p,
lb_worker_t *lb,
lb_sub_worker_t *wr,
+ ajp_worker_t *aw,
jk_logger_t *l)
{
const char *arg;
- const char *lb_name = lb->name;
+ const char *lb_name = NULL;
status_worker_t *w = p->worker;
int rc = 0;
int rv;
int i;
+ int old;
JK_TRACE_ENTER(l);
- 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->name, lb_name);
+ if (lb) {
+ lb_name = lb->name;
+ 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->name, lb_name);
+ }
+ else {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' committing changes for ajp worker '%s'",
+ w->name, aw->name);
+ }
if (lb) {
if (status_get_string(p, JK_STATUS_ARG_LBM_ACTIVATION, NULL, &arg, l) == JK_TRUE) {
@@ -2691,6 +2957,41 @@
0, INT_MAX, &wr->distance, lb_name, l))
rc |= 4;
}
+ old = aw->cache_timeout;
+ if (set_int_if_changed(p, aw->name, "connection_pool_timeout", JK_STATUS_ARG_AJP_CACHE_TO,
+ 0, INT_MAX, &aw->cache_timeout, lb_name, l)) {
+ rc |= 4;
+ if (old == 0) {
+ unsigned int i;
+ for (i = 0; i < aw->ep_cache_sz; i++) {
+ ajp_endpoint_t *ae = (ajp_endpoint_t *) aw->ep_cache[i];
+ if (ae)
+ ae->last_access = time(NULL);
+ }
+ }
+ }
+ if (set_int_if_changed(p, aw->name, "connect_timeout", JK_STATUS_ARG_AJP_CONNECT_TO,
+ 0, INT_MAX, &aw->connect_timeout, lb_name, l))
+ rc |= 4;
+ if (set_int_if_changed(p, aw->name, "prepost_timeout", JK_STATUS_ARG_AJP_PREPOST_TO,
+ 0, INT_MAX, &aw->prepost_timeout, lb_name, l))
+ rc |= 4;
+ if (set_int_if_changed(p, aw->name, "reply_timeout", JK_STATUS_ARG_AJP_REPLY_TO,
+ 0, INT_MAX, &aw->reply_timeout, lb_name, l))
+ rc |= 4;
+ if (set_int_if_changed(p, aw->name, "retries", JK_STATUS_ARG_AJP_RETRIES,
+ 1, INT_MAX, &aw->retries, lb_name, l))
+ rc |= 4;
+ if (set_uint_if_changed(p, aw->name, "recovery_options", JK_STATUS_ARG_AJP_REC_OPTS,
+ 0, INT_MAX, &aw->recovery_opts, lb_name, l))
+ rc |= 4;
+ if (set_uint_if_changed(p, aw->name, "max_packet_size", JK_STATUS_ARG_AJP_MAX_PK_SZ,
+ 8*1024, 64*1024, &aw->max_packet_size, lb_name, l)) {
+ rc |= 4;
+ if (aw->max_packet_size > lb->max_packet_size) {
+ lb->max_packet_size = aw->max_packet_size;
+ }
+ }
return rc;
}
@@ -2731,6 +3032,20 @@
aname=JK_STATUS_ARG_LBM_TEXT_DOMAIN;
else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE))
aname=JK_STATUS_ARG_LBM_TEXT_DISTANCE;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_CACHE_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_CONNECT_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_PREPOST_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO))
+ aname=JK_STATUS_ARG_AJP_TEXT_REPLY_TO;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES))
+ aname=JK_STATUS_ARG_AJP_TEXT_RETRIES;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS))
+ aname=JK_STATUS_ARG_AJP_TEXT_REC_OPTS;
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ))
+ aname=JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ;
else {
jk_log(l, JK_LOG_WARNING,
"Status worker '%s' unknown attribute '%s'",
@@ -2759,6 +3074,8 @@
for (j = 0; j < lb->num_of_workers; j++) {
int sync_needed = JK_FALSE;
lb_sub_worker_t *wr = &(lb->lb_workers[j]);
+ jk_worker_t *jw = wr->worker;
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;;
snprintf(vname, 32-1, "" JK_STATUS_ARG_MULT_VALUE_BASE "%d", j);
if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) {
@@ -2773,6 +3090,55 @@
0, INT_MAX, &wr->distance, name, l))
sync_needed = JK_TRUE;
}
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO)) {
+ int old = aw->cache_timeout;
+ if (set_int_if_changed(p, aw->name, "connection_pool_timeout", vname,
+ 0, INT_MAX, &aw->cache_timeout, name, l)) {
+ sync_needed = JK_TRUE;
+ if (old == 0) {
+ unsigned int i;
+ for (i = 0; i < aw->ep_cache_sz; i++) {
+ ajp_endpoint_t *ae = (ajp_endpoint_t *) aw->ep_cache[i];
+ if (ae)
+ ae->last_access = time(NULL);
+ }
+ }
+ }
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO)) {
+ if (set_int_if_changed(p, aw->name, "connect_timeout", vname,
+ 0, INT_MAX, &aw->connect_timeout, name, l))
+ sync_needed = JK_TRUE;
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO)) {
+ if (set_int_if_changed(p, aw->name, "prepost_timeout", vname,
+ 0, INT_MAX, &aw->prepost_timeout, name, l))
+ sync_needed = JK_TRUE;
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO)) {
+ if (set_int_if_changed(p, aw->name, "reply_timeout", vname,
+ 0, INT_MAX, &aw->reply_timeout, name, l))
+ sync_needed = JK_TRUE;
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES)) {
+ if (set_int_if_changed(p, aw->name, "retries", vname,
+ 1, INT_MAX, &aw->retries, name, l))
+ sync_needed = JK_TRUE;
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS)) {
+ if (set_uint_if_changed(p, aw->name, "recovery_options", vname,
+ 0, INT_MAX, &aw->recovery_opts, name, l))
+ sync_needed = JK_TRUE;
+ }
+ else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ)) {
+ if (set_uint_if_changed(p, aw->name, "max_packet_size", vname,
+ 8*1024, 64*1024, &aw->max_packet_size, name, l)) {
+ sync_needed = JK_TRUE;
+ if (aw->max_packet_size > lb->max_packet_size) {
+ lb->max_packet_size = aw->max_packet_size;
+ }
+ }
+ }
else {
int rv = status_get_string(p, vname, NULL, &arg, l);
if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) {
@@ -3150,6 +3516,7 @@
jk_worker_t *jw = NULL;
lb_worker_t *lb = NULL;
lb_sub_worker_t *wr = NULL;
+ ajp_worker_t *aw = NULL;
JK_TRACE_ENTER(l);
fetch_worker_and_sub_worker(p, "editing", &worker, &sub_worker, l);
@@ -3197,11 +3564,34 @@
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' %s lb worker '%s' sub worker '%s'",
w->name, "editing", lb->name, wr->name);
- form_member(s, p, wr, lb->name, l);
+ aw = (ajp_worker_t *)wr->worker->worker_private;
+ form_member(s, p, wr, aw, worker, l);
JK_TRACE_EXIT(l);
return JK_TRUE;
}
}
+ else if (jw->type == JK_AJP13_WORKER_TYPE ||
+ jw->type == JK_AJP14_WORKER_TYPE) {
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
+ if (aw) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' %s ajp worker '%s'",
+ w->name, "editing", aw->name);
+ jk_shm_lock();
+ if (aw->sequence != aw->s->h.sequence)
+ jk_ajp_pull(aw, l);
+ jk_shm_unlock();
+ form_member(s, p, NULL, aw, worker, l);
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+ }
+ else {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' aw worker is (null)",
+ w->name);
+ }
+ }
else {
if (JK_IS_DEBUG_LEVEL(l))
jk_log(l, JK_LOG_DEBUG,
@@ -3222,6 +3612,7 @@
jk_worker_t *jw = NULL;
lb_worker_t *lb = NULL;
lb_sub_worker_t *wr = NULL;
+ ajp_worker_t *aw = NULL;
int rc;
JK_TRACE_ENTER(l);
@@ -3268,7 +3659,8 @@
jk_log(l, JK_LOG_DEBUG,
"Status worker '%s' %s lb worker '%s' sub worker '%s'",
w->name, "updating", lb->name, wr->name);
- rc = commit_member(s, p, lb, wr, l);
+ aw = (ajp_worker_t *)wr->worker->worker_private;
+ rc = commit_member(s, p, lb, wr, aw, l);
if (rc) {
wr->sequence++;
lb->sequence++;
@@ -3281,6 +3673,29 @@
update_mult(lb, l);
JK_TRACE_EXIT(l);
return JK_TRUE;
+ }
+ }
+ else if (jw->type == JK_AJP13_WORKER_TYPE ||
+ jw->type == JK_AJP14_WORKER_TYPE) {
+ ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
+ if (aw) {
+ if (JK_IS_DEBUG_LEVEL(l))
+ jk_log(l, JK_LOG_DEBUG,
+ "Status worker '%s' %s ajp worker '%s'",
+ w->name, "updating", aw->name);
+ if (aw->sequence != aw->s->h.sequence)
+ jk_ajp_pull(aw, l);
+ if (commit_member(s, p, NULL, NULL, aw, l)) {
+ aw->sequence++;
+ jk_ajp_push(aw, l);
+ }
+ JK_TRACE_EXIT(l);
+ return JK_TRUE;
+ }
+ else {
+ jk_log(l, JK_LOG_WARNING,
+ "Status worker '%s' aw worker is (null)",
+ w->name);
}
}
else {
Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?rev=611689&r1=611688&r2=611689&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sun Jan 13 17:04:06 2008
@@ -44,6 +44,10 @@
<subsection name="Native">
<changelog>
<update>
+ Status: Add manageability for ajp parameters of ajp
+ workers and ajp lb members. (rjung)
+ </update>
+ <update>
Status: Change parameter names of update action to
make them more easily distinguishable from other parameters. (rjung)
</update>
Modified: tomcat/connectors/trunk/jk/xdocs/reference/status.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/status.xml?rev=611689&r1=611688&r2=611689&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/status.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/status.xml Sun Jan 13 17:04:06 2008
@@ -40,9 +40,6 @@
</p>
<p>
The status worker is especially powerful, when used together with load balancing workers.
-The dynamic management features of load balancers in combination with the status worker
-are a good reason, to use load balancer workers on top of ajp13 workers, even if there would
-be only one member worker in the load balancer.
</p>
<p>
This document does not explain the HTML user interface of the status worker.
@@ -85,8 +82,7 @@
worker will be applied during runtime without a restart of the web server.
</li>
<li>
-<b>reset</b>: reset all runtime information for a load balancer
-or one of its members.
+<b>reset</b>: reset all runtime statistics for a worker.
</li>
<li>
<b>recover</b>: Mark a member of a load balancer, that is in error state, for immediate recovery.
@@ -148,15 +144,28 @@
<b>Legend</b>: Do not show the legend for the information presented in "list" and "show" actions
</li>
<li>
-<b>Load Balancer Workers</b>: Do not show workers of type "lb"
+<b>URI mappings</b>: Do not show the URI mapping for the workers
+</li>
+<li>
+<b>Load Balancing Workers</b>: Do not show workers of type "lb"
</li>
<li>
<b>AJP Workers</b>: Do not show workers of type ajp
</li>
<li>
-<b>Member Workers</b>: Do not show detailed information concerning each member of load balancers
+<b>Balancer Members</b>: Do not show detailed information concerning each member of load balancers
+</li>
+<li>
+<b>Load Balancer Configuration</b>: Do not show configuration data for load balancers
+</li>
+<li>
+<b>Load Balancer Summary</b>: Do not show status summary for load balancers
+</li>
+<li>
+<b>AJP Configuration</b>: Do not show configuration data for ajp workers load balancer members
</li>
</ul>
+The last three minimization features have been added in version 1.2.27.
</p>
</subsection>
@@ -439,7 +448,17 @@
<li>
<b>0x0020</b>: only allow read_only actions for a read/write status worker.
</li>
+<li>
+<b>0x0040</b>: hide load balancer configuration
+</li>
+<li>
+<b>0x0080</b>: hide load balancer status summary
+</li>
+<li>
+<b>0x0100</b>: hide configuraton for ajp and load balancer member workers
+</li>
</ul>
+Values 0x0040-0x0100 have been added in version 1.2.27.
</p>
</subsection>
<subsection name="Data Parameters for the standard Update Action">
@@ -492,6 +511,34 @@
<b>vwd</b>: distance to express preferences (integer)
</li>
</ul>
+Finally the list of parameters you can use to change settings for ajp workers and ajp load balancer members:
+<ul>
+<li>
+<b>vacpt</b>: connection_pool_timeout (number)
+</li>
+<li>
+<b>vact</b>: connect_timeout (number)
+</li>
+<li>
+<b>vapt</b>: prepost_timeout (number)
+</li>
+<li>
+<b>vart</b>: reply_timeout (number)
+</li>
+<li>
+<b>var</b>: retries (number)
+</li>
+<li>
+<b>varo</b>: recovery_options (number)
+</li>
+<li>
+<b>vamps</b>: max_packet_size (number)
+</li>
+</ul>
+The leading character "v" has been added to the parameters in version 1.2.27.
+Changing settings for ajp workers has also been introduced in version 1.2.27.
+</p>
+<p>
For the details of all parameters, we refer to the <a href="workers.html">workers.properties Reference</a>.
</p>
</subsection>
@@ -503,7 +550,8 @@
configuration aspect for all members of a load balancer simultaneously, this
will be triggered by the parameter <b>att</b>. The value of the parameter indicates,
which aspect you want to edit. The list is the same as in the previous section:
-"vwa", "vwf", "vwn", "vwr", "vwc" and "vwd". But here you
+"vwa", "vwf", "vwn", "vwr", "vwc", "vwd", "vacpt", "vact", "vapt", "vart", "var",
+"varo" and "vamps". But here you
need to put the name into the parameter "att", instead of using it as a request
parameter name.
</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org