Author: jfrederic.clere(a)jboss.com
Date: 2008-10-22 17:44:32 -0400 (Wed, 22 Oct 2008)
New Revision: 1988
Modified:
trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Use jsessionid route to find the balancer.
Modified: trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-10-22 18:02:16 UTC
(rev 1987)
+++ trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-10-22 21:44:32 UTC
(rev 1988)
@@ -1247,12 +1247,60 @@
return OK;
}
+/**
+ * Find the balancer corresponding to the node information
+ */
+static const char *get_route_balancer(request_rec *r)
+{
+ proxy_balancer *balancer;
+ char *route = NULL;
+ char *sticky_used;
+ int i;
+ void *sconf = r->server->module_config;
+ proxy_server_conf *conf = (proxy_server_conf *)
+ ap_get_module_config(sconf, &proxy_module);
+
+ balancer = (proxy_balancer *)conf->balancers->elts;
+ for (i = 0; i < conf->balancers->nelts; i++, balancer++) {
+ route = get_route(r, balancer->sticky, r->uri, &sticky_used);
+ if (route) {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "cluster: Found value %s for "
+ "stickysession %s", route, balancer->sticky);
+ if ((route = strchr(route, '.')) != NULL )
+ route++;
+ if (route && *route) {
+ nodeinfo_t *ou;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "cluster: Found route %s", route);
+ if (node_storage->find_node(&ou, route) == APR_SUCCESS) {
+ if (!strcmp(balancer->name, ou->mess.balancer)) {
+ /* here we have the route and domain for find_session_route ...
*/
+ apr_table_setn(r->notes, "CLUSTER_ROUTE", route);
+ if (ou->mess.Domain[0] != '\0') {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "cluster: Found domain %s for %s",
ou->mess.Domain, route);
+ apr_table_setn(r->notes, "CLUSTER_DOMAIN",
ou->mess.Domain);
+ }
+ return balancer->name;
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
/*
* See if we could map the request.
+ * first check is we have a balancer corresponding to the route.
+ * then search the balancer correspond to the context and host.
*/
static int proxy_cluster_trans(request_rec *r)
{
- char *balancer = get_context_host_balancer(r);
+ const char *balancer = get_route_balancer(r);
+ if (!balancer)
+ balancer = get_context_host_balancer(r);
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r->server,
"proxy_cluster_trans for %d %s %s uri: %s",
Show replies by date