You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Ruediger Pluem <rp...@apache.org> on 2021/08/25 07:53:08 UTC

Re: svn commit: r1892587 - in /httpd/httpd/trunk: os/unix/unixd.c server/listen.c server/mpm/event/event.c server/mpm/prefork/prefork.c server/mpm/worker/worker.c


On 8/25/21 12:22 AM, ylavic@apache.org wrote:
> Author: ylavic
> Date: Tue Aug 24 22:22:40 2021
> New Revision: 1892587
> 
> URL: http://svn.apache.org/viewvc?rev=1892587&view=rev
> Log:
> mpm_{event,worker,prefork}: late stop of children processes on restart.
> 
> Change how the main process handles restarts, from:
>     0. <restart signal>
>     1. stop old generation of children processes (graceful or not)
>     2. reload new configuration
>     3. start new generation of children processes
> to:
>     0. <restart signal>
>     1. reload new configuration
>     2. stop old generation of children processes (graceful or not)
>     3. start new generation of children processes
> 
> The delay between stop and start is now very short and does not depend on the
> reload time (which can be quite long with many vhosts and/or complex setups
> with regexps or whatever third party components to compile).
> 
> Also, while reloading, the old generation of children processes keeps accepting
> and handling incoming connections until the new generation is up to take over.
> 
> * os/unix/unixd.c (sig_term, sig_restart):
>   Set AP_MPMQ_STOPPING only once.
> 
> * server/listen.c (ap_duplicate_listeners):
>   Use ap_log_error() the main server instead of ap_log_perror().
> 
> * server/mpm/{event,worker,prefork}/{event,worker,prefork}.c
>     ({event,worker,prefork}_retained_data):
>   Save the generation pool pointer (gen_pool) and all the buckets here, they
>   won't be cleared before the reload like pconf so they need a persitent
>   storage accross restarts (i.e. retained->gen_pool).
> 
> * server/mpm/{event,worker,prefork}/{event,worker,prefork}.c
>     (perform_idle_server_maintenance, child_main, make_child):
>   Change usage of all_buckets (previously with global/static scope) to the new
>   retained->buckets array.
> 
> 
> Modified:
>     httpd/httpd/trunk/os/unix/unixd.c
>     httpd/httpd/trunk/server/listen.c
>     httpd/httpd/trunk/server/mpm/event/event.c
>     httpd/httpd/trunk/server/mpm/prefork/prefork.c
>     httpd/httpd/trunk/server/mpm/worker/worker.c
> 

> Modified: httpd/httpd/trunk/server/mpm/event/event.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/event/event.c?rev=1892587&r1=1892586&r2=1892587&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/server/mpm/event/event.c (original)
> +++ httpd/httpd/trunk/server/mpm/event/event.c Tue Aug 24 22:22:40 2021

> @@ -3753,16 +3761,13 @@ static int event_pre_config(apr_pool_t *
>      if (!retained) {
>          retained = ap_retained_data_create(userdata_key, sizeof(*retained));
>          retained->mpm = ap_unixd_mpm_get_retained_data();
> +        retained->mpm->baton = retained;
>          retained->max_daemons_limit = -1;
>          if (retained->mpm->module_loads) {
>              test_atomics = 1;
>          }
>      }
>      retained->mpm->mpm_state = AP_MPMQ_STARTING;
> -    if (retained->mpm->baton != retained) {
> -        retained->mpm->was_graceful = 0;

Why is this no longer needed?

> -        retained->mpm->baton = retained;
> -    }
>      ++retained->mpm->module_loads;
>  
>      /* test once for correct operation of fdqueue */
> 

> Modified: httpd/httpd/trunk/server/mpm/worker/worker.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/worker/worker.c?rev=1892587&r1=1892586&r2=1892587&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/server/mpm/worker/worker.c (original)
> +++ httpd/httpd/trunk/server/mpm/worker/worker.c Tue Aug 24 22:22:40 2021

> @@ -2024,13 +2033,10 @@ static int worker_pre_config(apr_pool_t
>      if (!retained) {
>          retained = ap_retained_data_create(userdata_key, sizeof(*retained));
>          retained->mpm = ap_unixd_mpm_get_retained_data();
> +        retained->mpm->baton = retained;
>          retained->max_daemons_limit = -1;
>      }
>      retained->mpm->mpm_state = AP_MPMQ_STARTING;
> -    if (retained->mpm->baton != retained) {
> -        retained->mpm->was_graceful = 0;

Why is this no longer needed?

> -        retained->mpm->baton = retained;
> -    }
>      ++retained->mpm->module_loads;
>  
>      /* sigh, want this only the second time around */
> 
> 
> 

Regards

RĂ¼diger


Re: svn commit: r1892587 - in /httpd/httpd/trunk: os/unix/unixd.c server/listen.c server/mpm/event/event.c server/mpm/prefork/prefork.c server/mpm/worker/worker.c

Posted by Yann Ylavic <yl...@gmail.com>.
On Wed, Aug 25, 2021 at 11:26 AM Yann Ylavic <yl...@gmail.com> wrote:
>
> On Wed, Aug 25, 2021 at 9:53 AM Ruediger Pluem <rp...@apache.org> wrote:
> >
> > Why is this no longer needed?
>
> Thanks for noticing, I'll revert.

r1892595.

>
>
> Regards;
> Yann.

Re: svn commit: r1892587 - in /httpd/httpd/trunk: os/unix/unixd.c server/listen.c server/mpm/event/event.c server/mpm/prefork/prefork.c server/mpm/worker/worker.c

Posted by Yann Ylavic <yl...@gmail.com>.
On Wed, Aug 25, 2021 at 9:53 AM Ruediger Pluem <rp...@apache.org> wrote:
>
> On 8/25/21 12:22 AM, ylavic@apache.org wrote:
>
> > @@ -3753,16 +3761,13 @@ static int event_pre_config(apr_pool_t *
> >      if (!retained) {
> >          retained = ap_retained_data_create(userdata_key, sizeof(*retained));
> >          retained->mpm = ap_unixd_mpm_get_retained_data();
> > +        retained->mpm->baton = retained;
> >          retained->max_daemons_limit = -1;
> >          if (retained->mpm->module_loads) {
> >              test_atomics = 1;
> >          }
> >      }
> >      retained->mpm->mpm_state = AP_MPMQ_STARTING;
> > -    if (retained->mpm->baton != retained) {
> > -        retained->mpm->was_graceful = 0;
>
> Why is this no longer needed?

Argh, forgot to revert this change, first because it's unrelated and
second because it's bad.
I first thought that the ->baton never changes (forgot why I did that
in the first place) but if a different MPM is LoadModule'd during
restart it does, and we want to be ungraceful..
Thanks for noticing, I'll revert.


Regards;
Yann.