diff options
author | Jean-Frederic Clere <jfclere@apache.org> | 2006-07-29 21:08:00 +0000 |
---|---|---|
committer | Jean-Frederic Clere <jfclere@apache.org> | 2006-07-29 21:08:00 +0000 |
commit | 6464834567adbea3c15e150effa2ef523e82429a (patch) | |
tree | c67bacef4b669b0f28e8d8a3cb759d41ab01088f | |
parent | d514bfb90b8fca80f50e7402179d8c37a18bc847 (diff) | |
download | httpd-6464834567adbea3c15e150effa2ef523e82429a.tar.gz |
Copy the workers to the comarea for the checker in the post-config.
(Instead doing it when parsing the configuration file).
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/httpd-proxy-scoreboard@426837 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | modules/proxy/mod_proxy.c | 14 | ||||
-rw-r--r-- | modules/proxy/mod_proxy.h | 2 | ||||
-rw-r--r-- | modules/proxy/proxy_util.c | 43 |
3 files changed, 44 insertions, 15 deletions
diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 70d6b77773..5a562c5623 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1151,13 +1151,11 @@ static const char * } } else { - int adding = 0; proxy_worker *worker = ap_proxy_get_worker(cmd->temp_pool, conf, r); if (!worker) { const char *err = ap_proxy_add_worker(&worker, cmd->pool, conf, r); if (err) return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL); - adding = 1; } else { ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, "worker %s already used by another worker", worker->name); @@ -1170,10 +1168,6 @@ static const char * if (err) return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL); } - - /* XXX: ProxyPass is not a good name look for Location? */ - if (adding) - proxy_checkstorage_add_entry(worker, "ProxyPass"); } return NULL; } @@ -1523,7 +1517,6 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) const apr_array_header_t *arr; const apr_table_entry_t *elts; int i; - int adding = 0; if (cmd->path) path = apr_pstrdup(cmd->pool, cmd->path); @@ -1559,7 +1552,6 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) const char *err; if ((err = ap_proxy_add_worker(&worker, cmd->pool, conf, name)) != NULL) return apr_pstrcat(cmd->temp_pool, "BalancerMember ", err, NULL); - adding = 1; } else { ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, "worker %s already used by another worker", worker->name); @@ -1585,9 +1577,6 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) } /* Add the worker to the load balancer */ ap_proxy_add_worker_to_balancer(cmd->pool, balancer, worker); - /* XXX: Holy cow: The worker can belong to more that one balancer! */ - if (adding) - proxy_checkstorage_add_entry(worker, balancer->name); return NULL; } @@ -1869,6 +1858,9 @@ static int proxy_post_config(apr_pool_t *pconf, apr_pool_t *plog, /* if we have a memory provider create the comarea here */ proxy_create_comarea(pconf); + /* Also fill the comarea of the health-checker */ + proxy_checkstorage_add_workers(pconf, s); + return OK; } diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index dcbec49ab4..9c9cbc1deb 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -446,8 +446,8 @@ APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, request_status, /* proxy_util.c */ -PROXY_DECLARE(void) proxy_checkstorage_add_entry(proxy_worker *worker, const char *balancer_name); PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf); +PROXY_DECLARE(void) proxy_checkstorage_add_workers(apr_pool_t *pconf, server_rec *s); PROXY_DECLARE(void) proxy_lookup_storage_provider(); PROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r); diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 70a97c7f06..01f4b6f37f 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -2250,10 +2250,47 @@ PROXY_DECLARE(void) proxy_lookup_storage_provider() checkstorage = ap_lookup_provider(PROXY_CKMETHOD, "default", "0"); } -/* Store the worker information in the comarea */ -PROXY_DECLARE(void) proxy_checkstorage_add_entry(proxy_worker *worker, const char *balancer_name) +/* Copy all the worker information in the comarea */ +PROXY_DECLARE(void) proxy_checkstorage_add_workers(apr_pool_t *pconf, server_rec *s) { if (checkstorage) { - checkstorage->add_entry(worker, balancer_name, worker->id); + while (s) { + void *sconf = s->module_config; + proxy_server_conf *conf; + proxy_worker *worker; + proxy_balancer *balancer; + int i, j, k; + + conf = (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module); + worker = (proxy_worker *) conf->workers->elts; + for (i = 0; i < conf->workers->nelts; i++) { + const char *name = NULL; + /* find the balancer if any */ + balancer = (proxy_balancer *)conf->balancers->elts; + for (j = 0; j< conf->balancers->nelts; j++) { + proxy_worker *myworker = (proxy_worker *)balancer->workers->elts; + for (k = 0; k < balancer->workers->nelts; k++) { + if (myworker->id == worker->id) { + name = balancer->name; + break; + } + myworker++; + } + if (name) + break; + } + + if (!name) { + /* No balancer */ + name = "None"; + } + checkstorage->add_entry(worker, name, worker->id); + worker++; + } + + /* XXX: Do we need something for reverse and forward */ + + s = s->next; + } } } |