Author: rjung
Date: Sun Jun 24 06:10:07 2007
New Revision: 550221

URL: http://svn.apache.org/viewvc?view=rev&rev=550221
Log:
- Common: Add recovery options for recovering idempotent http methods
  HEAD and GET.
- Correct documentation for worker attributes retries and
  recovery_options.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
    tomcat/connectors/trunk/jk/xdocs/reference/workers.xml

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?view=diff&rev=550221&r1=550220&r2=550221
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Sun Jun 24 
06:10:07 2007
@@ -1604,6 +1604,20 @@
                         op->recoverable = JK_FALSE;
                 }
 
+                /*
+                 * We revert back to recoverable, if recovery_opts allow it 
for GET or HEAD
+                 */
+                if (op->recoverable == JK_FALSE) {
+                    if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_HEAD) {
+                        if (!strcmp(s->method, "HEAD"))
+                            op->recoverable = JK_TRUE;
+                    }
+                    else if (p->worker->recovery_opts & 
RECOVER_ALWAYS_HTTP_GET) {
+                        if (!strcmp(s->method, "GET"))
+                            op->recoverable = JK_TRUE;
+                    }
+                }
+
                 JK_TRACE_EXIT(l);
                 return JK_FALSE;
             }
@@ -1630,6 +1644,21 @@
                  */
                 if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCGETREQUEST)
                     op->recoverable = JK_FALSE;
+
+                /*
+                 * We revert back to recoverable, if recovery_opts allow it 
for GET or HEAD
+                 */
+                if (op->recoverable == JK_FALSE) {
+                    if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_HEAD) {
+                        if (!strcmp(s->method, "HEAD"))
+                            op->recoverable = JK_TRUE;
+                    }
+                    else if (p->worker->recovery_opts & 
RECOVER_ALWAYS_HTTP_GET) {
+                        if (!strcmp(s->method, "GET"))
+                            op->recoverable = JK_TRUE;
+                    }
+                }
+
                 /*
                  * we want to display the webservers error page, therefore
                  * we return JK_FALSE
@@ -1662,6 +1691,20 @@
                 if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCSENDHEADER)
                     op->recoverable = JK_FALSE;
 
+                /*
+                 * We revert back to recoverable, if recovery_opts allow it 
for GET or HEAD
+                 */
+                if (op->recoverable == JK_FALSE) {
+                    if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_HEAD) {
+                        if (!strcmp(s->method, "HEAD"))
+                            op->recoverable = JK_TRUE;
+                    }
+                    else if (p->worker->recovery_opts & 
RECOVER_ALWAYS_HTTP_GET) {
+                        if (!strcmp(s->method, "GET"))
+                            op->recoverable = JK_TRUE;
+                    }
+                }
+
                 JK_TRACE_EXIT(l);
                 return JK_FALSE;
             }
@@ -1832,7 +1875,7 @@
         err = ajp_send_request(e, s, l, p, op);
         if (err == JK_TRUE) {
 
-            /* If we have the no recoverable error, it's probably because
+            /* If we have an unrecoverable error, it's probably because
              * the sender (browser) stopped sending data before the end
              * (certainly in a big post)
              */
@@ -1908,7 +1951,7 @@
                 }
             }
             else {
-                /* if we can't get reply, check if no recover flag was set
+                /* if we can't get reply, check if unrecoverable flag was set
                  * if is_recoverable_error is cleared, we have started
                  * receiving upload data and we must consider that
                  * operation is no more recoverable

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?view=diff&rev=550221&r1=550220&r2=550221
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.h Sun Jun 24 
06:10:07 2007
@@ -197,9 +197,11 @@
 #define AJP_DEF_RECOVERY_OPTS     (0)   /* NO RECOVERY / NO    */
 #define AJP_DEF_SOCKET_TIMEOUT    (0)  /* No timeout */
 
-#define RECOVER_ABORT_IF_TCGETREQUEST    0x0001 /* DONT RECOVER IF TOMCAT FAIL 
AFTER RECEIVING REQUEST */
-#define RECOVER_ABORT_IF_TCSENDHEADER    0x0002 /* DONT RECOVER IF TOMCAT FAIL 
AFTER SENDING HEADERS */
+#define RECOVER_ABORT_IF_TCGETREQUEST    0x0001 /* DON'T RECOVER IF TOMCAT 
FAILS AFTER RECEIVING REQUEST */
+#define RECOVER_ABORT_IF_TCSENDHEADER    0x0002 /* DON'T RECOVER IF TOMCAT 
FAILS AFTER SENDING HEADERS */
 #define RECOVER_ABORT_IF_CLIENTERROR     0x0004 /* CLOSE THE SOCKET IN CASE OF 
CLIENT ERROR */
+#define RECOVER_ALWAYS_HTTP_HEAD         0x0008 /* RECOVER HTTP HEAD REQUESTS, 
EVEN IF ABORT OPTIONS ARE SET */
+#define RECOVER_ALWAYS_HTTP_GET          0x0010 /* RECOVER HTTP GET REQUESTS, 
EVEN IF ABORT OPTIONS ARE SET */
 
 #define JK_MAX_HTTP_STATUS_FAILS   32   /* Should be enough for most 400 and 
500 statuses */
 

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=550221&r1=550220&r2=550221
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Sun Jun 24 
06:10:07 2007
@@ -27,6 +27,14 @@
   <br />
   <subsection name="Native">
     <changelog>
+      <update>
+      Common: Add recovery options for recovering idempotent http methods
+      HEAD and GET. (rjung)
+      </update>
+      <fix>
+      Correct documentation for worker attributes retries and
+      recovery_options. (rjung)
+      </fix>
       <fix>
       Make writing log lines and line endings more atomic. (rjung)
       </fix>

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=550221&r1=550220&r2=550221
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/workers.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/workers.xml Sun Jun 24 06:10:07 
2007
@@ -149,12 +149,6 @@
 </p>
 </directive>
 
-<directive name="retries" default="2" required="false">
-The number of retries that the worker will try in case of error returned from 
remote
-Tomcat. If the number of retries set is greater than two (the default value), 
on
-each retry after default an extra wait of 100ms will be inserted.
-</directive>
-
 <directive name="connection_pool_size" default="see text" required="false">
 This defines the number of connections made to the AJP backend that
 are maintained as a connection pool.
@@ -283,7 +277,7 @@
 Tomcat worker. If sticky_session is set to <b>True</b> or <b>1</b> sessions 
are sticky, otherwise
 sticky_session is set to <b>False</b>. Set sticky_session to <b>False</b> when 
Tomcat
 is using a Session Manager which can persist session data across multiple
-instances of Tomcat. By default sticky_session is set to True.
+instances of Tomcat.
 </directive>
 
 <directive name="sticky_session_force" default="False" required="false">
@@ -361,6 +355,18 @@
 </p>
 </directive>
 
+<directive name="retries" default="2" required="false">
+<warn>This directive also exists for normal workers.
+For those it has a <a href="#Advanced worker directives">different 
meaning</a>.</warn>
+If the load balancer can not get a free connection for a member worker
+from the pool, it will try again a number of times given by <b>retries</b>.
+Before each retry, it will make a small pause, starting with 50 milliseconds
+and doubling before each retry until a maximum of 100 milliseconds.
+<p>
+Until version <b>1.2.16</b> the default value was 3.
+</p>
+</directive>
+
 <directive name="secret" default="" required="false">
 Set a default secret word for all defined workers.
 See worker secret attribute description for more info.
@@ -571,27 +577,40 @@
 </p>
 </directive>
 
-<directive name="recovery_options" default="0" required="false">
-Only used for a member worker of a load balancer.
+<directive name="retries" default="2" required="false">
+<warn>This directive also exists for load balancer workers.
+For those it has a <a href="#Load balancing directives">different 
meaning</a>.</warn>
+The maximum number of times that the worker will send a request to Tomcat
+in case of a communication error. Each retry will be done over another
+connection. The first time already gets counted, so retries=2 means
+one retry after error. If the value is greater than the default value, on
+each additional retry an extra wait of 100ms will be inserted.
+<p>
+See also the attribute <b>recovery_options</b> for a more fine-grained control
+of retries.
+</p>
 <p>
-Recovery options property told webserver how to handle recovery when
-it detect that tomcat failed.
-By default, webserver will forward the request to another tomcat in LB mode
-(or to another ajp thread in ajp13 mode).
-values are : 0 (full recovery), 1 (don't recover if tomcat failed after 
getting the request),
-2 (don't recover if tomcat failed after sending the headers to client), 3 
(don't recover if tomcat failed
-getting the request or after sending the headers to client).
-</p>
-<p>
-This features has been added in <b>jk 1.2.6</b> to avoid problem with 
hung/broken tomcat's
-and works on all servlet engines supporting ajp13.
-Full recovery by default.
-</p>
-<p>If the value 4 is added to the recovery options, the connection
-between the webserver and tomcat will be closed if the client connection
-to the webserver is terminated during the request/response cycle. This allows
-to inform the servlet engine about broken client connections during lengthy 
operations.
-This feature has been added in <b>jk 1.2.16</b>
+Until version <b>1.2.16</b> the default value was 3.
+</p>
+</directive>
+
+<directive name="recovery_options" default="0" required="false">
+Recovery options influence, how we should handle retries,
+in case we detect a problem with Tomcat.
+How often we will retry is controlled by the attribute <b>retries</b>.
+<p>
+This attribute is a bit mask. The following bits are allowed:<br/>
+1: don't recover if tomcat failed after getting the request<br/>
+2: don't recover if tomcat failed after sending the headers to client<br/>
+4: close the connection to tomcat, if we detect an error when writing back
+the answer to the client (browser)<br/>
+8: always recover requests for HTTP method HEAD (even if Bits 1 or 2 are 
set)<br/>
+16: always recover requests for HTTP method GET (even if Bits 1 or 2 are 
set)<br/>
+</p>
+<p>
+This features has been added in <b>jk 1.2.6</b>.
+Option 4 has been added in version <b>1.2.16</b>,
+options 8 and 16 in version <b>1.2.24</b>.
 </p>
 </directive>
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to