mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
* Set the new environment variable BALANCER_ROUTE_CHANGED if a worker with a
route different from the one supplied by the client had been chosen or if the client supplied no routing information for a balancer with sticky sessions. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@446929 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -267,6 +267,16 @@ static proxy_worker *find_session_route(proxy_balancer *balancer,
|
||||
* Find the worker that has this route defined.
|
||||
*/
|
||||
worker = find_route_worker(balancer, *route, r);
|
||||
if (worker && strcmp(*route, worker->s->route)) {
|
||||
/*
|
||||
* Notice that the route of the worker chosen is different from
|
||||
* the route supplied by the client.
|
||||
*/
|
||||
apr_table_setn(r->subprocess_env, "BALANCER_ROUTE_CHANGED", "1");
|
||||
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
|
||||
"proxy: BALANCER: Route changed from %s to %s",
|
||||
*route, worker->s->route);
|
||||
}
|
||||
return worker;
|
||||
}
|
||||
else
|
||||
@@ -424,6 +434,17 @@ static int proxy_balancer_pre_request(proxy_worker **worker,
|
||||
|
||||
return HTTP_SERVICE_UNAVAILABLE;
|
||||
}
|
||||
if ((*balancer)->sticky && runtime) {
|
||||
/*
|
||||
* This balancer has sticky sessions and the client either has not
|
||||
* supplied any routing information or all workers for this route
|
||||
* including possible redirect and hotstandby workers are in error
|
||||
* state, but we have found another working worker for this
|
||||
* balancer where we can send the request. Thus notice that we have
|
||||
* changed the route to the backend.
|
||||
*/
|
||||
apr_table_setn(r->subprocess_env, "BALANCER_ROUTE_CHANGED", "1");
|
||||
}
|
||||
*worker = runtime;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user