Changes with Apache 2.3.0
[Remove entries to the current 2.0 and 2.2 section below, when backported]
+ *) mod_proxy_balancer: 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. [Ruediger Pluem]
+
*) mod_proxy: Print the correct error message for erroneous configured
ProxyPass directives. PR 40439. [serai lans-tv.com]
* 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
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;
}