mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +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:
4
CHANGES
4
CHANGES
@@ -2,6 +2,10 @@
|
|||||||
Changes with Apache 2.3.0
|
Changes with Apache 2.3.0
|
||||||
[Remove entries to the current 2.0 and 2.2 section below, when backported]
|
[Remove entries to the current 2.0 and 2.2 section below, when backported]
|
||||||
|
|
||||||
|
*) mod_proxy_balancer: Retry worker chosen by route / redirect worker if
|
||||||
|
it is in error state before sending "Service Temporarily Unavailable".
|
||||||
|
PR 38962. [Christian Boitel <cboitel lfdj.com>]
|
||||||
|
|
||||||
*) mod_proxy_balancer: Add information about the route, the sticky session
|
*) mod_proxy_balancer: Add information about the route, the sticky session
|
||||||
and the worker used during a request as environment variables. PR 39806.
|
and the worker used during a request as environment variables. PR 39806.
|
||||||
[Brian <brectanu gmail.com>]
|
[Brian <brectanu gmail.com>]
|
||||||
|
@@ -219,18 +219,39 @@ static proxy_worker *find_session_route(proxy_balancer *balancer,
|
|||||||
*/
|
*/
|
||||||
worker = find_route_worker(balancer, *route);
|
worker = find_route_worker(balancer, *route);
|
||||||
if (worker && !PROXY_WORKER_IS_USABLE(worker)) {
|
if (worker && !PROXY_WORKER_IS_USABLE(worker)) {
|
||||||
/* We have a worker that is unusable.
|
/*
|
||||||
* It can be in error or disabled, but in case
|
* If the worker is in error state run
|
||||||
* it has a redirection set use that redirection worker.
|
* retry on that worker. It will be marked as
|
||||||
* This enables to safely remove the member from the
|
* operational if the retry timeout is elapsed.
|
||||||
* balancer. Of course you will need a some kind of
|
* The worker might still be unusable, but we try
|
||||||
* session replication between those two remote.
|
* anyway.
|
||||||
*/
|
*/
|
||||||
if (*worker->s->redirect)
|
ap_proxy_retry_worker("BALANCER", worker, r->server);
|
||||||
worker = find_route_worker(balancer, worker->s->redirect);
|
if (!PROXY_WORKER_IS_USABLE(worker)) {
|
||||||
/* Check if the redirect worker is usable */
|
/*
|
||||||
if (worker && !PROXY_WORKER_IS_USABLE(worker))
|
* We have a worker that is unusable.
|
||||||
worker = NULL;
|
* 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;
|
return worker;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user