From 44d1474f1ea7a8782cc37fd248d902112543a450 Mon Sep 17 00:00:00 2001 From: Mladen Turk Date: Thu, 9 Sep 2004 13:15:40 +0000 Subject: [PATCH] Add PROXY_WORKER_IGNORE_ERRORS flags that disables puting the entire worker in retry mode, cause for forward workers the remote is not fixed. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105047 13f79535-47bb-0310-9956-ffa450edef68 --- modules/proxy/mod_proxy.c | 15 +++++++++------ modules/proxy/mod_proxy.h | 1 + modules/proxy/proxy_util.c | 6 ++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 2fb560c711..ac9622390b 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1120,13 +1120,16 @@ static const char * psf->req = flag; psf->req_set = 1; - /* Add default forward proxy worker */ - if ((err = ap_proxy_add_worker(&(psf->forward), parms->pool, - psf, "*://*:0"))) { - return apr_pstrcat(parms->temp_pool, "ProxyRequests ", err, NULL); - } - + if (flag) { + /* Add default forward proxy worker */ + if ((err = ap_proxy_add_worker(&(psf->forward), parms->pool, + psf, "*://*:0"))) { + return apr_pstrcat(parms->temp_pool, "ProxyRequests ", err, NULL); + } + /* Do not disable worker in case of errors */ + psf->forward->status = PROXY_WORKER_IGNORE_ERRORS; + } return NULL; } diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 147001e02b..690cf93e98 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -224,6 +224,7 @@ struct proxy_conn_pool { /* woker status flags */ #define PROXY_WORKER_INITIALIZED 0x0001 +#define PROXY_WORKER_IGNORE_ERRORS 0x0002 #define PROXY_WORKER_IN_SHUTDOWN 0x0010 #define PROXY_WORKER_DISABLED 0x0020 #define PROXY_WORKER_IN_ERROR 0x0040 diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 6da107b6c3..ed7590b969 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1812,11 +1812,13 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function, conn->sock = newsock; connected = 1; } - /* Put the entire worker to error state + /* Put the entire worker to error state if + * the PROXY_WORKER_IGNORE_ERRORS flag is not set. * Altrough some connections may be alive * no further connections to the worker could be made */ - if (!connected && PROXY_WORKER_IS_USABLE(worker)) { + if (!connected && PROXY_WORKER_IS_USABLE(worker) && + !(worker->status & PROXY_WORKER_IGNORE_ERRORS)) { worker->status |= PROXY_WORKER_IN_ERROR; worker->error_time = apr_time_now(); ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, -- 2.50.1