1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-07 04:02:58 +03:00

* Retry worker chosen by client supplied route / redirect worker if it

is in error state before sending "Service Temporarily Unavailable".

PR: 38962
Submitted by: Christian Boitel <cboitel lfdj.com>
Reviewed by: rpluem


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@417443 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ruediger Pluem
2006-06-27 12:05:43 +00:00
parent a78010fd90
commit c99bff74f3
2 changed files with 36 additions and 11 deletions

View File

@@ -219,18 +219,39 @@ static proxy_worker *find_session_route(proxy_balancer *balancer,
*/
worker = find_route_worker(balancer, *route);
if (worker && !PROXY_WORKER_IS_USABLE(worker)) {
/* We have a worker that is unusable.
* It can be in error or disabled, but in case
* it has a redirection set use that redirection worker.
* This enables to safely remove the member from the
* balancer. Of course you will need a some kind of
* session replication between those two remote.
/*
* If the worker is in error state run
* retry on that worker. It will be marked as
* operational if the retry timeout is elapsed.
* The worker might still be unusable, but we try
* anyway.
*/
if (*worker->s->redirect)
worker = find_route_worker(balancer, worker->s->redirect);
/* Check if the redirect worker is usable */
if (worker && !PROXY_WORKER_IS_USABLE(worker))
worker = NULL;
ap_proxy_retry_worker("BALANCER", worker, r->server);
if (!PROXY_WORKER_IS_USABLE(worker)) {
/*
* We have a worker that is unusable.
* It can be in error or disabled, but in case
* it has a redirection set use that redirection worker.
* This enables to safely remove the member from the
* balancer. Of course you will need some kind of
* session replication between those two remote.
*/
if (*worker->s->redirect)
worker = find_route_worker(balancer, worker->s->redirect);
/* Check if the redirect worker is usable */
if (worker && !PROXY_WORKER_IS_USABLE(worker)) {
/*
* If the worker is in error state run
* retry on that worker. It will be marked as
* operational if the retry timeout is elapsed.
* The worker might still be unusable, but we try
* anyway.
*/
ap_proxy_retry_worker("BALANCER", worker, r->server);
if (!PROXY_WORKER_IS_USABLE(worker))
worker = NULL;
}
}
}
return worker;
}