You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2013/10/09 15:38:46 UTC
svn commit: r1530603 - in /httpd/httpd/trunk/modules/proxy: mod_proxy_ajp.c
mod_proxy_http.c proxy_util.c
Author: jim
Date: Wed Oct 9 13:38:45 2013
New Revision: 1530603
URL: http://svn.apache.org/r1530603
Log:
ping tuning via Yann Ylavic <yl...@gmail.com>
Modified:
httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
httpd/httpd/trunk/modules/proxy/mod_proxy_http.c
httpd/httpd/trunk/modules/proxy/proxy_util.c
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c?rev=1530603&r1=1530602&r2=1530603&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c Wed Oct 9 13:38:45 2013
@@ -341,7 +341,9 @@ static int ap_proxy_ajp_request(apr_pool
* we assume it is a request that cause a back-end timeout,
* but doesn't affect the whole worker.
*/
- if (APR_STATUS_IS_TIMEUP(status) && conn->worker->s->ping_timeout_set) {
+ if (APR_STATUS_IS_TIMEUP(status) &&
+ conn->worker->s->ping_timeout_set &&
+ conn->worker->s->ping_timeout >= 0) {
return HTTP_GATEWAY_TIME_OUT;
}
@@ -661,7 +663,9 @@ static int ap_proxy_ajp_request(apr_pool
* we assume it is a request that cause a back-end timeout,
* but doesn't affect the whole worker.
*/
- if (APR_STATUS_IS_TIMEUP(status) && conn->worker->s->ping_timeout_set) {
+ if (APR_STATUS_IS_TIMEUP(status) &&
+ conn->worker->s->ping_timeout_set &&
+ conn->worker->s->ping_timeout >= 0) {
apr_table_set(r->notes, "proxy_timedout", "1");
rv = HTTP_GATEWAY_TIME_OUT;
}
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_http.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_http.c?rev=1530603&r1=1530602&r2=1530603&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_http.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_http.c Wed Oct 9 13:38:45 2013
@@ -1241,9 +1241,10 @@ int ap_proxy_http_process_response(apr_p
dconf = ap_get_module_config(r->per_dir_config, &proxy_module);
do_100_continue = (worker->s->ping_timeout_set
- && ap_request_has_body(r)
+ && (worker->s->ping_timeout >= 0)
&& (PROXYREQ_REVERSE == r->proxyreq)
- && !(apr_table_get(r->subprocess_env, "force-proxy-request-1.0")));
+ && !(apr_table_get(r->subprocess_env, "force-proxy-request-1.0"))
+ && ap_request_has_body(r));
bb = apr_brigade_create(p, c->bucket_alloc);
pass_bb = apr_brigade_create(p, c->bucket_alloc);
@@ -1973,17 +1974,21 @@ static int proxy_http_handler(request_re
apr_table_set(backend->connection->notes, "proxy-request-hostname",
ssl_hostname);
}
- }
- /* Step Three-and-a-Half: See if the socket is still connected (if desired) */
- if (worker->s->ping_timeout_set && worker->s->ping_timeout < 0 &&
- !ap_proxy_is_socket_connected(backend->sock)) {
- backend->close = 1;
- ap_log_rerror(APLOG_MARK, APLOG_INFO, status, r, APLOGNO(02535)
- "socket check failed to %pI (%s)",
- worker->cp->addr, worker->s->hostname);
- retry++;
- continue;
+ /* Step Three-and-a-Half: See if the socket is still connected (if
+ * desired). Note: Since ap_proxy_connect_backend just above does
+ * the same check (unconditionally), this step is not required when
+ * backend's socket/connection is reused (ie. no Step Three).
+ */
+ if (worker->s->ping_timeout_set && worker->s->ping_timeout < 0 &&
+ !ap_proxy_is_socket_connected(backend->sock)) {
+ backend->close = 1;
+ ap_log_rerror(APLOG_MARK, APLOG_INFO, status, r, APLOGNO(02535)
+ "socket check failed to %pI (%s)",
+ worker->cp->addr, worker->s->hostname);
+ retry++;
+ continue;
+ }
}
/* Step Four: Send the Request
@@ -1992,8 +1997,9 @@ static int proxy_http_handler(request_re
*/
if ((status = ap_proxy_http_request(p, r, backend, worker,
conf, uri, locurl, server_portstr)) != OK) {
- if ((status == HTTP_SERVICE_UNAVAILABLE) && worker->s->ping_timeout_set &&
- worker->s->ping_timeout > 0) {
+ if ((status == HTTP_SERVICE_UNAVAILABLE) &&
+ worker->s->ping_timeout_set &&
+ worker->s->ping_timeout >= 0) {
backend->close = 1;
ap_log_rerror(APLOG_MARK, APLOG_INFO, status, r, APLOGNO(01115)
"HTTP: 100-Continue failed to %pI (%s)",
Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=1530603&r1=1530602&r2=1530603&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Wed Oct 9 13:38:45 2013
@@ -3069,13 +3069,15 @@ PROXY_DECLARE(int) ap_proxy_create_hdrbr
proxy_dir_conf *dconf = ap_get_module_config(r->per_dir_config, &proxy_module);
/*
+ * HTTP "Ping" test? Easiest is 100-Continue. However:
* To be compliant, we only use 100-Continue for requests with bodies.
* We also make sure we won't be talking HTTP/1.0 as well.
*/
do_100_continue = (worker->s->ping_timeout_set
- && ap_request_has_body(r)
+ && (worker->s->ping_timeout >= 0)
&& (PROXYREQ_REVERSE == r->proxyreq)
- && !(apr_table_get(r->subprocess_env, "force-proxy-request-1.0")));
+ && !(apr_table_get(r->subprocess_env, "force-proxy-request-1.0")),
+ && ap_request_has_body(r));
if (apr_table_get(r->subprocess_env, "force-proxy-request-1.0")) {
/*