From d2e320f5099bc643dba7d26dc9272d889f2488e3 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Tue, 29 Nov 2011 15:36:11 +0000 Subject: [PATCH] Logic which makes the balancer "active" or not... so we can turn them off and on as needed. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1207926 13f79535-47bb-0310-9956-ffa450edef68 --- modules/proxy/mod_proxy.c | 8 ++++---- modules/proxy/mod_proxy.h | 4 +++- modules/proxy/mod_proxy_balancer.c | 8 +++++--- modules/proxy/proxy_util.c | 9 ++++++--- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 519b70eef5..aa76ab9502 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -1449,7 +1449,7 @@ static const char * elts = (const apr_table_entry_t *)arr->elts; /* Distinguish the balancer from worker */ if (ap_proxy_valid_balancer_name(r, 9)) { - proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r); + proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r, 0); if (!balancer) { const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, f, 0); if (err) @@ -1905,7 +1905,7 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg) ap_str_tolower(path); /* lowercase scheme://hostname */ /* Try to find the balancer */ - balancer = ap_proxy_get_balancer(cmd->temp_pool, conf, path); + balancer = ap_proxy_get_balancer(cmd->temp_pool, conf, path, 0); if (!balancer) { err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, path, "/", 0); if (err) @@ -1985,7 +1985,7 @@ static const char * } if (ap_proxy_valid_balancer_name(name, 9)) { - balancer = ap_proxy_get_balancer(cmd->pool, conf, name); + balancer = ap_proxy_get_balancer(cmd->pool, conf, name, 0); if (!balancer) { if (in_proxy_section) { err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, name, "/", 0); @@ -2134,7 +2134,7 @@ static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg) "> arguments are not supported for non url.", NULL); if (ap_proxy_valid_balancer_name((char *)conf->p, 9)) { - balancer = ap_proxy_get_balancer(cmd->pool, sconf, conf->p); + balancer = ap_proxy_get_balancer(cmd->pool, sconf, conf->p, 0); if (!balancer) { err = ap_proxy_define_balancer(cmd->pool, &balancer, sconf, conf->p, "/", 0); diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 5d8b778ffd..236aa94ebd 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -639,11 +639,13 @@ PROXY_DECLARE(int) ap_proxy_valid_balancer_name(char *name, int i); * @param p memory pool used for temporary storage while finding balancer * @param conf current proxy server configuration * @param url url to find the worker from; must have balancer:// prefix + * @param careactive true if we care if the balancer is active or not * @return proxy_balancer or NULL if not found */ PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, - const char *url); + const char *url, + int careactive); /** * Update the balancer's vhost related fields diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index 83c365d109..cb4df557d8 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -452,7 +452,7 @@ static int proxy_balancer_pre_request(proxy_worker **worker, * for balancer, because this is failover attempt. */ if (!*balancer && - !(*balancer = ap_proxy_get_balancer(r->pool, conf, *url))) + !(*balancer = ap_proxy_get_balancer(r->pool, conf, *url, 1))) return DECLINED; /* Step 2: Lock the LoadBalancer @@ -951,7 +951,7 @@ static int balancer_handler(request_rec *r) } if ((name = apr_table_get(params, "b"))) bsel = ap_proxy_get_balancer(r->pool, conf, - apr_pstrcat(r->pool, BALANCER_PREFIX, name, NULL)); + apr_pstrcat(r->pool, BALANCER_PREFIX, name, NULL), 0); if ((name = apr_table_get(params, "w"))) { wsel = ap_proxy_get_worker(r->pool, bsel, conf, name); @@ -1201,7 +1201,7 @@ static int balancer_handler(request_rec *r) ap_rvputs(r, balancer->s->name, "\n", NULL); ap_rputs("\n\n" "" - "\n", r); + "\n", r); /* the below is a safe cast, since the number of slots total will * never be more than max_workers, which is restricted to int */ ap_rprintf(r, "\n", balancer->max_workers, @@ -1230,6 +1230,8 @@ static int balancer_handler(request_rec *r) ap_rvputs(r, balancer->s->vhost, " -> ", NULL); } ap_rvputs(r, balancer->s->vpath, "\n", NULL); + ap_rprintf(r, "\n", + !balancer->s->inactive ? "Yes" : "No"); ap_rputs("
MaxMembersStickySessionDisableFailoverTimeoutFailoverAttemptsMethodPath
PathActive
%d [%d Used]%s
\n
", r); ap_rputs("\n\n" "" diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 6ae1253937..df3d6d9609 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1091,7 +1091,7 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r, * to find which member actually handled this request. */ if (ap_proxy_valid_balancer_name((char *)real, 0) && - (balancer = ap_proxy_get_balancer(r->pool, sconf, real))) { + (balancer = ap_proxy_get_balancer(r->pool, sconf, real, 1))) { int n, l3 = 0; proxy_worker **worker = (proxy_worker **)balancer->workers->elts; const char *urlpart = ap_strchr_c(real, '/'); @@ -1292,7 +1292,8 @@ PROXY_DECLARE(int) ap_proxy_valid_balancer_name(char *name, int i) PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p, proxy_server_conf *conf, - const char *url) + const char *url, + int care) { proxy_balancer *balancer; char *c, *uri = apr_pstrdup(p, url); @@ -1309,7 +1310,9 @@ PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p, balancer = (proxy_balancer *)conf->balancers->elts; for (i = 0; i < conf->balancers->nelts; i++) { if (strcasecmp(balancer->s->name, uri) == 0) { - return balancer; + if (!care || !balancer->s->inactive) { + return balancer; + } } balancer++; } -- 2.40.0
Worker URL