]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Make worker retry algorithm much simpler removing incremental
authorMladen Turk <mturk@apache.org>
Fri, 17 Sep 2004 08:00:20 +0000 (08:00 +0000)
committerMladen Turk <mturk@apache.org>
Fri, 17 Sep 2004 08:00:20 +0000 (08:00 +0000)
timeout increase.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105177 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy.h
modules/proxy/proxy_util.c

index 94c8e5cd27caa3ffdfda8b9a8ac41137c0b3114e..b9273314a87f0a7c0005b02ef985185906a567ac 100644 (file)
@@ -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 {
index 6badc044fe9d28ed9f92169afcfa5db641cbae9b..32a47c462f327a8c3c9fdcb51065b17496500230 100644 (file)
@@ -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",