Ryan Bloom <[EMAIL PROTECTED]> writes:

> On Friday 27 July 2001 11:50, Jeff Trawick wrote:
> > Ryan Bloom <[EMAIL PROTECTED]> writes:
> > > Unless somebody objects, I will commit my latest patch to the threaded
> > > MPM later this weekend. This is the patch that implements a multi-process
> > > single acceptor/multi-worker model. This will allow us to finish fixing
> > > the threaded MPM.

> > What happens with graceful restart?  Is there a limit on the number
> > of requests which will be served using the old configuration?  (That
> > is something which I thought sucked with my
> > accept-thread/worker-thread MPM...  I'm interested in how this problem
> > is approached.)

The point here is that an accept thread picks up new connections from
the kernel in advance of a worker thread processing them.  You can end
up with a backlog of requests.  At graceful restart time this process
which needs to go away has already taken ownership of a certain number
of requests which must be processed before it can exit.

current threaded MPM:

  once graceful restart is signalled, no new connections will be
  accepted from the kernel so we start using the new configuration
  ASAP

accept-thread/worker thread MPM:

  likely there is a backlog of requests at the time graceful restart
  is signalled; these have to be processed with the old configuration

> 
> The way the threaded MPM currently works, and this patch continues the current model
> follows:
> 
> the process starts, and creates a bunch of worker threads.
> When we get a graceful restart request, all the workers are supposed to die unless 
>they are
> serving a request.  (this does not work today, but can actually be implemented with 
>the single
> listener/multi-worker)
> A new process is started as soon as the old process kills the first thread.
> The new process watches as other threads die, and creates new threads to fill those 
>spots
> in the scoreboard.  Because we are watching for old threads to die, we do not fight 
>over
> worker slots.
> When the last thread dies in the original process, that process dies, and the new 
>process takes
> over for good.
> 
> This is how it is continued to be approached with the new patch.  This means that we 
>finish serving
> the current connections when we get a graceful restart, but do not accept any new 
>ones.

unlike with current MPM, worker threads can't die as soon as they
finish the current request... they have to stay around as long as we
have a backlog of accepted connections to process

> This new model (actually the original threaded model for Apache 2.0) allows us to 
>actually finish
> fixing graceful restarts in the threaded MPM.  The current model makes it impossible 
>to cleanly shut
> down threads that are sitting in locks, so gracefully shutting down a child process 
>is not currently possible.

Which locks are problematic now for graceful restart?  Which locks are
no longer problematic? 

I thought it was non-graceful stop/restart we didn't know how to do.

-- 
Jeff Trawick | [EMAIL PROTECTED] | PGP public key at web site:
       http://www.geocities.com/SiliconValley/Park/9289/
             Born in Roswell... married an alien...

Reply via email to