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 2007/01/27 16:15:49 UTC

svn commit: r500543 - in /tomcat/connectors/trunk/jk: native/common/jk_status.c xdocs/miscellaneous/changelog.xml xdocs/reference/status.xml xdocs/reference/workers.xml

Author: rjung
Date: Sat Jan 27 07:15:48 2007
New Revision: 500543

URL: http://svn.apache.org/viewvc?view=rev&rev=500543
Log:
- Allow a user of a read/write status worker to switch it to and
  from read_only mode temporarily.
- Do not show read/write commands in a read_only 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
    tomcat/connectors/trunk/jk/xdocs/reference/workers.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?view=diff&rev=500543&r1=500542&r2=500543
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Sat Jan 27 07:15:48 2007
@@ -69,6 +69,7 @@
 #define JK_STATUS_ARG_OPTION_NO_LEGEND     0x0004
 #define JK_STATUS_ARG_OPTION_NO_LB         0x0008
 #define JK_STATUS_ARG_OPTION_NO_AJP        0x0010
+#define JK_STATUS_ARG_OPTION_READ_ONLY     0x0020
 
 #define JK_STATUS_ARG_LB_RETRIES           ("lr")
 #define JK_STATUS_ARG_LB_RECOVER_TIME      ("lt")
@@ -1150,6 +1151,7 @@
     char buf_wr[32];
     int cmd;
     int mime;
+    int read_only = 0;
     int single = 0;
     unsigned int hide_members;
     const char *arg;
@@ -1169,6 +1171,13 @@
     mime = status_mime_int(arg);
     hide_members = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
                                 JK_STATUS_ARG_OPTION_NO_MEMBERS;
+    if (w->read_only) {
+        read_only = 1;
+    }
+    else {
+        read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+                    JK_STATUS_ARG_OPTION_READ_ONLY;
+    }
     if (cmd == JK_STATUS_CMD_SHOW) {
         single = 1;
     }
@@ -1202,12 +1211,14 @@
             status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
                              name, "", 0, 0, "", l);
         }
-        jk_puts(s, "|");
-        status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                         name, "", 0, 0, "", l);
-        jk_puts(s, "|");
-        status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
-                         name, "", 0, 0, "", l);
+        if (!read_only) {
+            jk_puts(s, "|");
+            status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                             name, "", 0, 0, "", l);
+            jk_puts(s, "|");
+            status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
+                             name, "", 0, 0, "", l);
+        }
         jk_puts(s, "]  ");
         jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
         jk_puts(s, "<table>" JK_STATUS_SHOW_LB_HEAD);
@@ -1324,18 +1335,22 @@
 
             if (mime == JK_STATUS_MIME_HTML) {
 
-                jk_puts(s, "<tr>\n<td>[");
-                status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                                 name, wr->s->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);
-                if (wr->s->state == JK_LB_STATE_ERROR) {
+                jk_puts(s, "<tr>\n<td>");
+                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);
                     jk_puts(s, "|");
-                    status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN,
+                    status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
                                      name, wr->s->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);
+                    }
+                    jk_puts(s, "]");
                 }
-                jk_puts(s, "]&nbsp;</td>");
+                jk_puts(s, "&nbsp;</td>");
                 jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW,
                           wr->s->name,
                           status_worker_type(wr->w->type),
@@ -1448,25 +1463,27 @@
         if (mime == JK_STATUS_MIME_HTML) {
 
             jk_puts(s, "</table><br/>\n");
-            jk_puts(s, "<b>E</b>dit one attribute for all members: [");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_ACTIVATION, l);
-            jk_puts(s, "\n|");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_FACTOR, l);
-            jk_puts(s, "\n|");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_ROUTE, l);
-            jk_puts(s, "\n|");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_REDIRECT, l);
-            jk_puts(s, "\n|");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_DOMAIN, l);
-            jk_puts(s, "\n|");
-            status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
-                             name, "", 0, 0, JK_STATUS_ARG_LBM_DISTANCE, l);
-            jk_puts(s, "\n]<br/>\n");
+            if (!read_only) {
+                jk_puts(s, "<b>E</b>dit one attribute for all members: [");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ACTIVATION, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_ACTIVATION, l);
+                jk_puts(s, "\n|");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_FACTOR, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_FACTOR, l);
+                jk_puts(s, "\n|");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_ROUTE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_ROUTE, l);
+                jk_puts(s, "\n|");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_REDIRECT, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_REDIRECT, l);
+                jk_puts(s, "\n|");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DOMAIN, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_DOMAIN, l);
+                jk_puts(s, "\n|");
+                status_write_uri(s, p, JK_STATUS_ARG_LBM_TEXT_DISTANCE, JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
+                                 name, "", 0, 0, JK_STATUS_ARG_LBM_DISTANCE, l);
+                jk_puts(s, "\n]<br/>\n");
+            }
 
         }
 
@@ -2919,6 +2936,7 @@
     int cmd;
     int mime;
     int refresh;
+    int read_only = 0;
     const char *arg;
     char *err = NULL;
     status_endpoint_t *p;
@@ -2963,6 +2981,13 @@
     status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
     mime = status_mime_int(arg);
     refresh = status_get_int(p, JK_STATUS_ARG_REFRESH, 0, l);
+    if (w->read_only) {
+        read_only = 1;
+    }
+    else {
+        read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
+                    JK_STATUS_ARG_OPTION_READ_ONLY;
+    }
 
     if (mime == JK_STATUS_MIME_HTML) {
         s->start_response(s, 200, "OK", headers_names, headers_vhtml, 3);
@@ -3021,7 +3046,7 @@
     }
 
     if (!err) {
-        if (w->read_only &&
+        if (read_only &&
             (cmd == JK_STATUS_CMD_EDIT ||
             cmd == JK_STATUS_CMD_UPDATE ||
             cmd == JK_STATUS_CMD_RESET ||
@@ -3195,6 +3220,9 @@
                 jk_puts(s, "<h1>JK Status Manager for ");
                 jk_puts(s, s->server_name);
                 jk_printf(s, ":%d", s->server_port);
+                if (read_only) {
+                    jk_puts(s, " (read only)");
+                }
                 jk_puts(s, "</h1>\n\n");
                 if ((cmd == JK_STATUS_CMD_LIST) ||
                     (cmd == JK_STATUS_CMD_SHOW) ||
@@ -3289,12 +3317,26 @@
                     jk_puts(s, "]&nbsp;&nbsp;");
                 }
                 if (cmd == JK_STATUS_CMD_LIST || cmd == JK_STATUS_CMD_SHOW) {
+                    if (!w->read_only) {
+                        jk_puts(s, "[");
+                        if (read_only) {
+                            status_write_uri(s, p, "Read/Write", 0, JK_STATUS_MIME_UNKNOWN,
+                                             NULL, NULL, 0, JK_STATUS_ARG_OPTION_READ_ONLY, NULL, l);
+                        }
+                        else {
+                            status_write_uri(s, p, "Read Only", 0, JK_STATUS_MIME_UNKNOWN,
+                                             NULL, NULL, JK_STATUS_ARG_OPTION_READ_ONLY, 0, NULL, l);
+                        }
+                        jk_puts(s, "]&nbsp;&nbsp;\n");
+                    }
+                }
+                if (cmd == JK_STATUS_CMD_LIST || cmd == JK_STATUS_CMD_SHOW) {
                     jk_puts(s, "[");
                     if (cmd == JK_STATUS_CMD_LIST)
                         jk_puts(s, "<b>S</b>=Show only this worker");
-                    if (!w->read_only && cmd == JK_STATUS_CMD_LIST)
+                    if (!read_only && cmd == JK_STATUS_CMD_LIST)
                         jk_puts(s, ", ");
-                    if (!w->read_only)
+                    if (!read_only)
                         jk_puts(s, "<b>E</b>=Edit worker, <b>R</b>=Reset worker state, <b>T</b>=Try worker recovery");
                     jk_puts(s, "]\n");
                 }

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=500543&r1=500542&r2=500543
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sat Jan 27 07:15:48 2007
@@ -27,6 +27,13 @@
   <subsection name="Native">
     <changelog>
       <add>
+      JkStatus: Allow a user of a read/write status worker to switch it
+      to and from read_only mode temporarily. (rjung)
+      </add>
+      <fix>
+      JkStatus: Do not show read/write commands in a read_only status worker. (rjung)
+      </fix>
+      <add>
       JkStatus: Allow lb sub workers in error state to be marked for recovery
       administratively from the status worker. (rjung)
       </add>

Modified: tomcat/connectors/trunk/jk/xdocs/reference/status.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/status.xml?view=diff&rev=500543&r1=500542&r2=500543
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/status.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/status.xml Sat Jan 27 07:15:48 2007
@@ -242,7 +242,7 @@
 attributes of status workers are helpful. The attribute "read_only" disables all features of
 the status worker, that can be used to change configurations or runtime status of the other workers.
 A read_only status worker will not allow access to the edit, update, reset or recover actions.
-The default value is "False", ie. read-write. To enable read_only you need to set it to "True".
+The default value is "False", ie. read/write. To enable read_only you need to set it to "True".
 </p>
 <p>
 You could configure two status workers, one has read_only and will be made available to a larger
@@ -369,6 +369,9 @@
 </li>
 <li>
 <b>0x0010</b>: hide ajp workers
+</li>
+<li>
+<b>0x0020</b>: only allow read_only actions for a read/write status worker.
 </li>
 </ul>
 </p>

Modified: tomcat/connectors/trunk/jk/xdocs/reference/workers.xml
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/workers.xml?view=diff&rev=500543&r1=500542&r2=500543
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/workers.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/workers.xml Sat Jan 27 07:15:48 2007
@@ -375,7 +375,7 @@
 <directive name="read_only" default="False" required="false">
 A status worker with read_only=True will not allow any operations,
 that change the runtime state or configuration of the other workers.
-These are edit/update/reset.
+These are edit/update/reset/recover.
 <p>
 This feature has been added in <b>jk 1.2.20</b>.
 </p>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org