From: William A. Rowe Jr Date: Wed, 11 Aug 2004 23:10:35 +0000 (+0000) Subject: Added dynamic worker limit. It ensures that the addng dynamic X-Git-Tag: post_ajp_proxy~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9b549607fc6eb83423d892a77dc7d0eef66b4c27;p=apache Added dynamic worker limit. It ensures that the addng dynamic workers to the balancers never excedes that limit. Submitted by: mturk git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@104625 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 21b81f0a66..bc1b96164a 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -26,6 +26,7 @@ /* Global balancer counter */ static int lb_workers = 0; +static int lb_workers_limit = 0; static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r); static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r); @@ -1157,8 +1158,17 @@ ap_proxy_add_worker_to_balancer(apr_pool_t *pool, proxy_balancer *balancer, prox ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &mpm_daemons); /* Check if we are prefork or single child */ - if (worker->hmax && mpm_daemons > 1) + if (worker->hmax && mpm_daemons > 1) { + /* Check only if workers_limit is set */ + if (lb_workers_limit && (lb_workers + 1) > lb_workers_limit) { + ap_log_perror(APLOG_MARK, APLOG_ERR, 0, pool, + "proxy: Can not add worker (%s) to balancer (%s)." + " Dynamic limit reached.", + worker->name, balancer->name); + return; + } score = ap_get_scoreboard_lb(getpid(), lb_workers); + } else #endif { @@ -1859,5 +1869,7 @@ PROXY_DECLARE(int) ap_proxy_connection_create(const char *proxy_function, PROXY_DECLARE(int) ap_proxy_lb_workers(void) { - return (lb_workers + PROXY_DYNAMIC_BALANCER_LIMIT); + /* Set the dynamic #workers limit */ + lb_workers_limit = lb_workers + PROXY_DYNAMIC_BALANCER_LIMIT; + return lb_workers_limit; }