Is it possible that Jim is talking about adding new stuff via the balancer 
manager and Yann about adding new stuff to the config file and doing a graceful 
restart?

Regards

Rüdiger

> -----Original Message-----
> From: Jim Jagielski [mailto:j...@jagunet.com]
> Sent: Dienstag, 25. August 2015 14:12
> To: dev@httpd.apache.org
> Subject: Re: svn commit: r1696960 - in /httpd/httpd/trunk: CHANGES
> docs/log-message-tags/next-number modules/proxy/mod_proxy_balancer.c
> 
> How and when do ALIGNED_PROXY_BALANCER_SHARED_SIZE and conf->max_balancers
> change???
> 
> > On Aug 21, 2015, at 8:34 AM, yla...@apache.org wrote:
> >
> > Author: ylavic
> > Date: Fri Aug 21 12:34:02 2015
> > New Revision: 1696960
> >
> > URL: http://svn.apache.org/r1696960
> > Log:
> > mod_proxy_balancer: Fix balancers and balancer members reuse on
> > restart when new ones are added.  PR 58024.
> >
> > Since slotmem_create() issues a strict check on the size of an existing
> > slot before reusing it, it won't reuse existing balancers and members
> when
> > new ones are added during restart (whereas growth margins would allow
> it).
> > Fix this by using slotmem_attach() first and if it succeeds do the
> checks
> > based on the returned previous number of existing entries.
> >
> > Modified:
> >    httpd/httpd/trunk/CHANGES
> >    httpd/httpd/trunk/docs/log-message-tags/next-number
> >    httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c
> >
> > Modified: httpd/httpd/trunk/CHANGES
> > URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1696960&r1=1696
> 959&r2=1696960&view=diff
> >
> ==========================================================================
> ====
> > --- httpd/httpd/trunk/CHANGES [utf-8] (original)
> > +++ httpd/httpd/trunk/CHANGES [utf-8] Fri Aug 21 12:34:02 2015
> > @@ -1,6 +1,9 @@
> >                                                          -*- coding:
> utf-8 -*-
> > Changes with Apache 2.5.0
> >
> > +  *) mod_proxy_balancer: Fix balancers and balancer members reuse on
> > +     restart when new ones are added.  PR 58024.  [Yann Ylavic]
> > +
> >   *) mod_socache_memcache: Add the 'MemcacheConnTTL' directive to
> control how
> >      long to keep idle connections with the memcache server(s).
> >      Change default value from 600 usec (!) to 15 sec. PR 58091
> >
> > Modified: httpd/httpd/trunk/docs/log-message-tags/next-number
> > URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/log-message-
> tags/next-number?rev=1696960&r1=1696959&r2=1696960&view=diff
> >
> ==========================================================================
> ====
> > --- httpd/httpd/trunk/docs/log-message-tags/next-number (original)
> > +++ httpd/httpd/trunk/docs/log-message-tags/next-number Fri Aug 21
> 12:34:02 2015
> > @@ -1 +1 @@
> > -2964
> > +2966
> >
> > Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c
> > URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_bal
> ancer.c?rev=1696960&r1=1696959&r2=1696960&view=diff
> >
> ==========================================================================
> ====
> > --- httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c (original)
> > +++ httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c Fri Aug 21
> 12:34:02 2015
> > @@ -761,8 +761,11 @@ static int balancer_post_config(apr_pool
> >         char *id;
> >         proxy_balancer *balancer;
> >         ap_slotmem_type_t type;
> > +        apr_size_t attached_size;
> > +        unsigned int attached_num;
> >         void *sconf = s->module_config;
> >         conf = (proxy_server_conf *)ap_get_module_config(sconf,
> &proxy_module);
> > +
> >         /*
> >          * During create_proxy_config() we created a dummy id. Now that
> >          * we have identifying info, we can create the real id
> > @@ -794,11 +797,39 @@ static int balancer_post_config(apr_pool
> >                          (int)ALIGNED_PROXY_BALANCER_SHARED_SIZE,
> >                          (int)conf->balancers->nelts, conf-
> >max_balancers);
> >
> > -            rv = storage->create(&new, conf->id,
> > -                                 ALIGNED_PROXY_BALANCER_SHARED_SIZE,
> > -                                 conf->max_balancers, type, pconf);
> > +            /* First try to attach() since the number of configured
> balancers
> > +             * may have changed during restart, and we don't want
> create() to
> > +             * fail because the overall size * number of entries is not
> stricly
> > +             * identical to the previous run.  There may still be
> enough room
> > +             * for this new run thanks to bgrowth margin, so if
> attach()
> > +             * succeeds we can only check for the number of available
> entries
> > +             * to be *greater or* equal to what we need now.  If
> attach() fails
> > +             * we simply fall back to create().
> > +             */
> > +            rv = storage->attach(&new, conf->id,
> > +                                 &attached_size, &attached_num,
> > +                                 pconf);
> > +            if (rv != APR_SUCCESS) {
> > +                rv = storage->create(&new, conf->id,
> > +
> ALIGNED_PROXY_BALANCER_SHARED_SIZE,
> > +                                     conf->max_balancers, type, pconf);
> > +            }
> > +            else {
> > +                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
> APLOGNO(02964)
> > +                             "Balancers attached: %d, %d (%d)",
> > +                             (int)ALIGNED_PROXY_BALANCER_SHARED_SIZE,
> > +                             (int)attached_num, conf->max_balancers);
> > +                if (attached_size == ALIGNED_PROXY_BALANCER_SHARED_SIZE
> > +                        && attached_num >= conf->balancers->nelts) {
> > +                    conf->max_balancers = attached_num;
> > +                }
> > +                else {
> > +                    rv = APR_ENOSPC;
> > +                }
> > +            }
> >             if (rv != APR_SUCCESS) {
> > -                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
> APLOGNO(01179) "balancer slotmem_create failed");
> > +                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
> APLOGNO(01179)
> > +                             "balancer slotmem create or attach
> failed");
> >                 return !OK;
> >             }
> >             conf->bslot = new;
> > @@ -864,11 +895,32 @@ static int balancer_post_config(apr_pool
> >                          (int)ALIGNED_PROXY_WORKER_SHARED_SIZE,
> >                          (int)balancer->max_workers, i);
> >
> > -            rv = storage->create(&new, balancer->s->sname,
> > -                                 ALIGNED_PROXY_WORKER_SHARED_SIZE,
> > -                                 balancer->max_workers, type, pconf);
> > +            /* try to attach first (see rationale from balancers above)
> */
> > +            rv = storage->attach(&new, balancer->s->sname,
> > +                                 &attached_size, &attached_num,
> > +                                 pconf);
> > +            if (rv != APR_SUCCESS) {
> > +                rv = storage->create(&new, balancer->s->sname,
> > +                                     ALIGNED_PROXY_WORKER_SHARED_SIZE,
> > +                                     balancer->max_workers, type,
> pconf);
> > +            }
> > +            else {
> > +                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
> APLOGNO(02965)
> > +                             "Workers attached: %s (%s), %d, %d (%d)
> [%u]",
> > +                             balancer->s->name, balancer->s->sname,
> > +                             (int)ALIGNED_PROXY_WORKER_SHARED_SIZE,
> > +                             (int)attached_num, balancer->max_workers,
> i);
> > +                if (attached_size == ALIGNED_PROXY_WORKER_SHARED_SIZE
> > +                        && attached_num >= balancer->workers->nelts) {
> > +                    balancer->max_workers = attached_num;
> > +                }
> > +                else {
> > +                    rv = APR_ENOSPC;
> > +                }
> > +            }
> >             if (rv != APR_SUCCESS) {
> > -                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
> APLOGNO(01185) "worker slotmem_create failed");
> > +                ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s,
> APLOGNO(01185)
> > +                             "worker slotmem create or attach failed");
> >                 return !OK;
> >             }
> >             balancer->wslot = new;
> >
> >

Reply via email to