From: Mladen Turk Date: Fri, 17 Sep 2004 08:00:20 +0000 (+0000) Subject: Make worker retry algorithm much simpler removing incremental X-Git-Tag: 2.1.1~252 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4442f1f73cd5e2c40cf0b2d35b6db8455f41163;p=thirdparty%2Fapache%2Fhttpd.git Make worker retry algorithm much simpler removing incremental timeout increase. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105177 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 94c8e5cd27c..b9273314a87 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -231,6 +231,8 @@ struct proxy_conn_pool { #define PROXY_WORKER_IS_USABLE(f) (!((f)->status & 0x00F0)) +/* default worker retry timeout in seconds */ +#define PROXY_WORKER_DEFAULT_RETRY 60 /* Worker configuration */ struct proxy_worker { diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 6badc044fe9..32a47c462f3 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1429,6 +1429,9 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser } if (rv == APR_SUCCESS) worker->status |= PROXY_WORKER_INITIALIZED; + /* Set default parameters */ + if (!worker->retry) + worker->retry = apr_time_from_sec(PROXY_WORKER_DEFAULT_RETRY); return rv; } @@ -1437,21 +1440,11 @@ PROXY_DECLARE(int) ap_proxy_retry_worker(const char *proxy_function, server_rec *s) { if (worker->status & PROXY_WORKER_IN_ERROR) { - apr_interval_time_t diff; - apr_time_t now = apr_time_now(); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "proxy: %s: retrying the worker for (%s)", proxy_function, worker->hostname); - if (worker->retry) - diff = worker->retry; - else { - /* Increase the time by 1 minute on each retry */ - diff = apr_time_from_sec((60 + 60 * worker->retries)); - /* Use 10 minutes as maximum value for retry */ - if (worker->retries < 8) - ++worker->retries; - } - if (now > worker->error_time + diff) { + if (apr_time_now() > worker->error_time + worker->retry) { + ++worker->retries; worker->status &= ~PROXY_WORKER_IN_ERROR; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "proxy: %s: worker for (%s) has been marked for retry",