mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
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
This commit is contained in:
@@ -1449,7 +1449,7 @@ static const char *
|
|||||||
elts = (const apr_table_entry_t *)arr->elts;
|
elts = (const apr_table_entry_t *)arr->elts;
|
||||||
/* Distinguish the balancer from worker */
|
/* Distinguish the balancer from worker */
|
||||||
if (ap_proxy_valid_balancer_name(r, 9)) {
|
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) {
|
if (!balancer) {
|
||||||
const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, f, 0);
|
const char *err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, r, f, 0);
|
||||||
if (err)
|
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 */
|
ap_str_tolower(path); /* lowercase scheme://hostname */
|
||||||
|
|
||||||
/* Try to find the balancer */
|
/* 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) {
|
if (!balancer) {
|
||||||
err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, path, "/", 0);
|
err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, path, "/", 0);
|
||||||
if (err)
|
if (err)
|
||||||
@@ -1985,7 +1985,7 @@ static const char *
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ap_proxy_valid_balancer_name(name, 9)) {
|
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 (!balancer) {
|
||||||
if (in_proxy_section) {
|
if (in_proxy_section) {
|
||||||
err = ap_proxy_define_balancer(cmd->pool, &balancer, conf, name, "/", 0);
|
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.",
|
"> arguments are not supported for non url.",
|
||||||
NULL);
|
NULL);
|
||||||
if (ap_proxy_valid_balancer_name((char *)conf->p, 9)) {
|
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) {
|
if (!balancer) {
|
||||||
err = ap_proxy_define_balancer(cmd->pool, &balancer,
|
err = ap_proxy_define_balancer(cmd->pool, &balancer,
|
||||||
sconf, conf->p, "/", 0);
|
sconf, conf->p, "/", 0);
|
||||||
|
@@ -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 p memory pool used for temporary storage while finding balancer
|
||||||
* @param conf current proxy server configuration
|
* @param conf current proxy server configuration
|
||||||
* @param url url to find the worker from; must have balancer:// prefix
|
* @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
|
* @return proxy_balancer or NULL if not found
|
||||||
*/
|
*/
|
||||||
PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
|
PROXY_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
|
||||||
proxy_server_conf *conf,
|
proxy_server_conf *conf,
|
||||||
const char *url);
|
const char *url,
|
||||||
|
int careactive);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the balancer's vhost related fields
|
* Update the balancer's vhost related fields
|
||||||
|
@@ -452,7 +452,7 @@ static int proxy_balancer_pre_request(proxy_worker **worker,
|
|||||||
* for balancer, because this is failover attempt.
|
* for balancer, because this is failover attempt.
|
||||||
*/
|
*/
|
||||||
if (!*balancer &&
|
if (!*balancer &&
|
||||||
!(*balancer = ap_proxy_get_balancer(r->pool, conf, *url)))
|
!(*balancer = ap_proxy_get_balancer(r->pool, conf, *url, 1)))
|
||||||
return DECLINED;
|
return DECLINED;
|
||||||
|
|
||||||
/* Step 2: Lock the LoadBalancer
|
/* Step 2: Lock the LoadBalancer
|
||||||
@@ -951,7 +951,7 @@ static int balancer_handler(request_rec *r)
|
|||||||
}
|
}
|
||||||
if ((name = apr_table_get(params, "b")))
|
if ((name = apr_table_get(params, "b")))
|
||||||
bsel = ap_proxy_get_balancer(r->pool, conf,
|
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"))) {
|
if ((name = apr_table_get(params, "w"))) {
|
||||||
wsel = ap_proxy_get_worker(r->pool, bsel, conf, name);
|
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, "</a></h3>\n", NULL);
|
ap_rvputs(r, balancer->s->name, "</a></h3>\n", NULL);
|
||||||
ap_rputs("\n\n<table border='0' style='text-align: left;'><tr>"
|
ap_rputs("\n\n<table border='0' style='text-align: left;'><tr>"
|
||||||
"<th>MaxMembers</th><th>StickySession</th><th>DisableFailover</th><th>Timeout</th><th>FailoverAttempts</th><th>Method</th>"
|
"<th>MaxMembers</th><th>StickySession</th><th>DisableFailover</th><th>Timeout</th><th>FailoverAttempts</th><th>Method</th>"
|
||||||
"<th>Path</th></tr>\n<tr>", r);
|
"<th>Path</th><th>Active</th></tr>\n<tr>", r);
|
||||||
/* the below is a safe cast, since the number of slots total will
|
/* the below is a safe cast, since the number of slots total will
|
||||||
* never be more than max_workers, which is restricted to int */
|
* never be more than max_workers, which is restricted to int */
|
||||||
ap_rprintf(r, "<td align='center'>%d [%d Used]</td>\n", balancer->max_workers,
|
ap_rprintf(r, "<td align='center'>%d [%d Used]</td>\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->vhost, " -> ", NULL);
|
||||||
}
|
}
|
||||||
ap_rvputs(r, balancer->s->vpath, "</td>\n", NULL);
|
ap_rvputs(r, balancer->s->vpath, "</td>\n", NULL);
|
||||||
|
ap_rprintf(r, "<td align='center'>%s</td>\n",
|
||||||
|
!balancer->s->inactive ? "Yes" : "No");
|
||||||
ap_rputs("</table>\n<br />", r);
|
ap_rputs("</table>\n<br />", r);
|
||||||
ap_rputs("\n\n<table border='0' style='text-align: left;'><tr>"
|
ap_rputs("\n\n<table border='0' style='text-align: left;'><tr>"
|
||||||
"<th>Worker URL</th>"
|
"<th>Worker URL</th>"
|
||||||
|
@@ -1091,7 +1091,7 @@ PROXY_DECLARE(const char *) ap_proxy_location_reverse_map(request_rec *r,
|
|||||||
* to find which member actually handled this request.
|
* to find which member actually handled this request.
|
||||||
*/
|
*/
|
||||||
if (ap_proxy_valid_balancer_name((char *)real, 0) &&
|
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;
|
int n, l3 = 0;
|
||||||
proxy_worker **worker = (proxy_worker **)balancer->workers->elts;
|
proxy_worker **worker = (proxy_worker **)balancer->workers->elts;
|
||||||
const char *urlpart = ap_strchr_c(real, '/');
|
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_DECLARE(proxy_balancer *) ap_proxy_get_balancer(apr_pool_t *p,
|
||||||
proxy_server_conf *conf,
|
proxy_server_conf *conf,
|
||||||
const char *url)
|
const char *url,
|
||||||
|
int care)
|
||||||
{
|
{
|
||||||
proxy_balancer *balancer;
|
proxy_balancer *balancer;
|
||||||
char *c, *uri = apr_pstrdup(p, url);
|
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;
|
balancer = (proxy_balancer *)conf->balancers->elts;
|
||||||
for (i = 0; i < conf->balancers->nelts; i++) {
|
for (i = 0; i < conf->balancers->nelts; i++) {
|
||||||
if (strcasecmp(balancer->s->name, uri) == 0) {
|
if (strcasecmp(balancer->s->name, uri) == 0) {
|
||||||
return balancer;
|
if (!care || !balancer->s->inactive) {
|
||||||
|
return balancer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
balancer++;
|
balancer++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user