*) mod_dav: Ensure URI is correctly uriencoded on return. PR 54611
[Timothy Wood <tjw omnigroup.com>]
+ *) Added balancer parameter failontimeout to allow server admin
+ to configure an IO timeout as an error in the balancer.
+ [Daniel Ruggeri]
+
Changes with Apache 2.2.24
*) SECURITY: CVE-2012-3499 (cve.mitre.org)
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_proxy_balancer: Add failontimeout parameter. Timeout will put worker
- in error state if an IO timeout is detected.
- trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1465839
- 2.4.x patch: http://svn.apache.org/viewvc?view=revision&revision=1476689
- 2.2.x patch: http://people.apache.org/~druggeri/patches/httpd-2.2.x-failontimeout.patch
- +1: druggeri, wrowe, rjung
- rjung: it would be nice to fix the indentation for the new
- ap_log_rerror(...) in modules/proxy/mod_proxy_balancer.c.
-
* mod_dav: Make sure that when we prepare an If URL for Etag comparison,
we compare unencoded paths. PR 53910 [Timothy Wood <tjw omnigroup com>]
trunk patch: http://svn.apache.org/r1470940
in the list. Worker recovery behaves the same as other worker errors.
Available with Apache HTTP Server 2.2.17 and later.
</td></tr>
+ <tr><td>failontimeout</td>
+ <td>Off</td>
+ <td>If set, an IO read timeout after a request is sent to the backend will
+ force the worker into error state. Worker recovery behaves the same as other
+ worker errors.
+ Available with Apache HTTP Server 2.2.25 and later.
+ </td></tr>
<tr><td>forcerecovery</td>
<td>On</td>
<td>Force the immediate recovery of all workers without considering the
}
}
+ else if (!strcasecmp(key, "failontimeout")) {
+ if (!strcasecmp(val, "on"))
+ balancer->failontimeout = 1;
+ else if (!strcasecmp(val, "off"))
+ balancer->failontimeout = 0;
+ else
+ return "failontimeout must be On|Off";
+ }
else if (!strcasecmp(key, "forcerecovery")) {
if (!strcasecmp(val, "on"))
balancer->forcerecovery = 1;
apr_array_header_t *errstatuses; /* statuses to force members into error */
int forcerecovery; /* Force recovery if all workers are in error state */
+ int failontimeout; /* Whether to mark a member in Err if IO timeout occurs */
};
struct proxy_balancer_method {
}
}
+ if (balancer->failontimeout
+ && (apr_table_get(r->notes, "proxy_timedout")) != NULL) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ "%s: Forcing worker (%s) into error state "
+ "due to timeout and 'failonstatus' parameter being set",
+ balancer->name, worker->name);
+ worker->s->status |= PROXY_WORKER_IN_ERROR;
+ worker->s->error_time = apr_time_now();
+
+ }
+
if ((rv = PROXY_THREAD_UNLOCK(balancer)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
"proxy: BALANCER: (%s). Unlock failed for post_request",
"proxy: error reading status line from remote "
"server %s:%d", backend->hostname, backend->port);
if (APR_STATUS_IS_TIMEUP(rc)) {
+ apr_table_set(r->notes, "proxy_timedout", "1");
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
"proxy: read timeout");
}