diff options
author | Jim Jagielski <jim@apache.org> | 2011-01-31 21:29:01 +0100 |
---|---|---|
committer | Jim Jagielski <jim@apache.org> | 2011-01-31 21:29:01 +0100 |
commit | 177e4e5f862efbffaeb8b989a6aecd8670b16f08 (patch) | |
tree | 50f512e233afa73f6f1fbb097acf95757f0a1960 | |
parent | tuck away code that lets us ensure that the id is always (diff) | |
download | apache2-177e4e5f862efbffaeb8b989a6aecd8670b16f08.tar.xz apache2-177e4e5f862efbffaeb8b989a6aecd8670b16f08.zip |
Move the lbmethod to also allow it to be adjusted runtime
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1065750 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | modules/proxy/mod_proxy.c | 4 | ||||
-rw-r--r-- | modules/proxy/mod_proxy.h | 2 | ||||
-rw-r--r-- | modules/proxy/mod_proxy_balancer.c | 12 | ||||
-rw-r--r-- | modules/proxy/proxy_util.c | 2 |
4 files changed, 10 insertions, 10 deletions
diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 1014f3c0e1..5b75b1c4f6 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -363,7 +363,7 @@ static const char *set_balancer_param(proxy_server_conf *conf, proxy_balancer_method *provider; provider = ap_lookup_provider(PROXY_LBMETHOD, val, "0"); if (provider) { - balancer->lbmethod = provider; + balancer->s->lbmethod = provider; return NULL; } return "unknown lbmethod"; @@ -2348,7 +2348,7 @@ static int proxy_status_hook(request_rec *r, int flags) ap_rprintf(r, "</td><td>%" APR_TIME_T_FMT "</td>", apr_time_sec(balancer->s->timeout)); ap_rprintf(r, "<td>%s</td>\n", - balancer->lbmethod->name); + balancer->s->lbmethod->name); ap_rputs("</table>\n", r); ap_rputs("\n\n<table border=\"0\"><tr>" "<th>Sch</th><th>Host</th><th>Stat</th>" diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 1bd69a4748..b1a90ff913 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -368,6 +368,7 @@ typedef struct { char nonce[APR_UUID_FORMATTED_LENGTH + 1]; apr_interval_time_t timeout; /* Timeout for waiting on free connection */ apr_time_t updated; /* timestamp of last update */ + proxy_balancer_method *lbmethod; int max_attempts; /* Number of attempts before failing */ int index; /* shm array index */ int sticky_force:1; /* Disable failover for sticky sessions */ @@ -382,7 +383,6 @@ struct proxy_balancer { apr_array_header_t *workers; /* initially configured workers */ apr_array_header_t *errstatuses; /* statuses to force members into error */ ap_slotmem_instance_t *slot; /* worker shm data - runtime */ - proxy_balancer_method *lbmethod; int growth; /* number of post-config workers can added */ int max_workers; /* maximum number of allowed workers */ const char *name; /* name of the load balancer */ diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index 36825cb638..305674df47 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -331,7 +331,7 @@ static proxy_worker *find_best_worker(proxy_balancer *balancer, return NULL; } - candidate = (*balancer->lbmethod->finder)(balancer, r); + candidate = (*balancer->s->lbmethod->finder)(balancer, r); if (candidate) candidate->s->elected++; @@ -480,9 +480,9 @@ static int proxy_balancer_pre_request(proxy_worker **worker, /* Step 4: find the session route */ runtime = find_session_route(*balancer, r, &route, &sticky, url); if (runtime) { - if ((*balancer)->lbmethod && (*balancer)->lbmethod->updatelbstatus) { + if ((*balancer)->s->lbmethod && (*balancer)->s->lbmethod->updatelbstatus) { /* Call the LB implementation */ - (*balancer)->lbmethod->updatelbstatus(*balancer, runtime, r->server); + (*balancer)->s->lbmethod->updatelbstatus(*balancer, runtime, r->server); } else { /* Use the default one */ int i, total_factor = 0; @@ -1005,7 +1005,7 @@ static int balancer_handler(request_rec *r) apr_time_sec(balancer->s->timeout)); ap_rprintf(r, "<td align=\"center\">%d</td>\n", balancer->s->max_attempts); ap_rprintf(r, "<td align=\"center\">%s</td>\n", - balancer->lbmethod->name); + balancer->s->lbmethod->name); ap_rputs("</table>\n<br />", r); ap_rputs("\n\n<table border=\"0\" style=\"text-align: left;\"><tr>" "<th>Worker URL</th>" @@ -1146,8 +1146,8 @@ static void balancer_child_init(apr_pool_t *p, server_rec *s) ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s, "slotmem_attach failed"); exit(1); /* Ugly, but what else? */ } - if (balancer->lbmethod && balancer->lbmethod->reset) - balancer->lbmethod->reset(balancer, s); + if (balancer->s->lbmethod && balancer->s->lbmethod->reset) + balancer->s->lbmethod->reset(balancer, s); init_balancer_members(conf, s, balancer); balancer++; } diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 4c075a3dae..bc0d443126 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1370,7 +1370,7 @@ PROXY_DECLARE(char *) ap_proxy_define_balancer(apr_pool_t *p, memset(bshared, 0, sizeof(proxy_balancer_shared)); - (*balancer)->lbmethod = lbmethod; + bshared->lbmethod = lbmethod; bshared->updated = apr_time_now(); bshared->was_malloced = (do_malloc != 0); |