httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Stein <>
Subject Re: Apache 2.0 beta STATUS
Date Mon, 22 Jan 2001 05:26:27 GMT
On Sun, Jan 21, 2001 at 09:58:20PM -0600, William A. Rowe, Jr. wrote:
> Filtered (gstein) carries the risk it can be bumped from the filter stack
> by some very mean spirited filter that is VERY_VERY_FIRST (unlikely), but
> applies only to Apache 2.0, and appears stable.

This is a mischaracterization. There is no risk. If somebody sneaks in
front, then the server operates quite fine. Completely robust.

You also did not mention that my patch allows free mixing of ap_r* and
ap_pass_brigade(). There is no possible way for output to be misordered.
Ryan's patch does *not* have that feature, and I pointed that out a *long*
time ago. That was the reason why I veto'd Victor's patch.

I consider mixing of the APIs critical. There is just no simple way to
ensure that output will never be mixed. Consider the handler which uses
ap_r* and then starts a subrequest which uses brigades, which returns to the
handler to use more ap_r* functions. Are we seriously going to start
sprinking order-synchronization calls throughout Apache to ensure that
everything is ordered properly? No. We will invariably miss some. How about
that third party DAV module that uses some output functions from mod_dav?
Which module is in charge of ensuring that the order remains synchronized?
Why should they have to care? (given that I've demonstrated they don't have
to care -- mixing APIs freely is quite possible and quite efficient)

> Based on requirements alone, I'm +1 on the latter patch.  I believe it is

Whose requirements? We're trying to fix Apache, not APR. And we're trying to
provide a way for people to continue to use ap_r* without suffering a
penalty. And we're trying to provide a way that they can transition to a
better API for some of the critical parts.

For example, I would think it would be great for a handler to ap_rputs() a
couple header strings, call a few output functions which use ap_r*, and then
call some other doo-dad that puts together a complex brigade using custom
buckets. Mixing of the APIs is quite important.

[ the above scenario isn't that difficult to imagine: I have been thinking
  about how mod_dav plugins can provide some custom output. The obvious
  mechanism is to let them use brigades/buckets in some way. But the
  wrapping output structures are still easiest to use ap_r* ]

> such nonesense.  The later seems more stable, in that the module author
> determines the stability.

Euh... why not just start with stable in the first place. You can't get
messed up output with my patch. No matter what you do.

> As I say, I'm for the module author controlling the unknowns with as little
> possible chance for interference from 'invisible forces'.

The invisible forces in this case is the requirements imposed by forcing a
module author and even the core Apache code to have to synchronize between
two totally different output mechanisms. Each coder must be aware of all the
other bits of code which could potentially produce output. Even worse, they
need to know *how* that other code did it. Not just "did they?" but "how?".
That kind of invisible coupling across the code base is a recipe for bugs.
Insert a sync call here, insert one there. Oops, we forgot to sync the two
mechanism over there, too. Oy! :-)


Greg Stein,

View raw message