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