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]