Evgeny Kotkov wrote on Wed, Dec 30, 2015 at 18:49:08 +0300:
> I'm aware of two possible ways of solving the problem:
> 
>  (1) Fix mod_dav, adjust mod_dav_svn accordingly
> 
>  (2) Reimplement PROPFIND in mod_dav_svn
> 
> Doing (1) is hard, since it requires revving mod_dav's API and special care
> for other modules using it.
>
> I believe that currently we don't have the necessary resources (aka 
> committers)
> to do that.  Given that the problem exists since 2003, I also doubt that it's
> going to solve itself in the nearby future.  And moreover, even if somehow
> managed to do that, the fix would probably only be available in the newer
> 2.6.x httpd releases.
> 
> With that in mind, I propose we do (2).

Wait a minute.  Isn't "we have few active committers" a reason for
choosing (1) over (2)?  I would naïvely expect "rewrite it" to be more
expensive to implement/maintain than "patch it".

Similarly, playing devil's advocate, if the issue exists since 2003,
then presumably it's not urgent to fix, and waiting until httpd-2.6 is
released might not be a major setback.

("Is not going to solve itself" is avoidable rhetoric: of course it's
not going to fix itself, somebody is going to have to develop a mod_dav
patch.)

So these are three points in favour of (1) rather than (2).  What are
the reasons for (2) over (1)?

> Apart from solving the memory usage issue, having the PROPFIND implementation
> in mod_dav_svn would allow us to improve a couple of other aspects of how we
> handle these requests, e.g.:
> 
>  - Shrink down the PROPFIND response size by avoiding duplicate xmlns:
>    namespace declarations that currently exist.
> 
>  - Optimize how we retrieve properties from the FS layer, since we would
>    no longer be doing mod_dav - mod_dav_svn - mod_dav transitions, and
>    would have more flexibility.

Are these significant?  How much faster will a checkout/update be if
these improvements were implemented?  Would it be possible to implement
in httpd-2.6 mod_dav features that would achieve comparable performance
(when mod_dav_svn is run under httpd-2.6)?

> As far as I know, those modules don't have tests
> and not breaking their behavior could be a challenging task.
> 

You might want to double-check that with the httpd-dev crowd.  IIRC
httpd has some of its 'make test' functionality out-of-tree.

Or ask breser; I know he ran into this problem (changing
mod_dav/mod_dav_svn without breaking mod_dav_fs) and he might have found
a solution.

> Although I'm not entirely happy with reimplementing a part of the protocol, I
> don't think that there are other realistic approaches to this serious problem.
> It wouldn't be the first time we're doing something like this, since we 
> already
> handle POST ourselves, as well as provide the custom Subversion's HTTPv2
> protocol implementation.
> 

Tangentially: We should find a new name for our POST-based protocol;
"HTTPv2" means something else to the wider world.

> I attached a proof-of-concept patch that does (2).  This patch solves the
> memory usage problem in my experiments and passes HTTPv2 / HTTPv1 tests.
> 
> Thoughts?

I'm not too happy at basically saying I prefer (1) over (2) when you've
already written a 2000-line patch for (2)...  but maybe (2) _is_ the
better way to go and I just don't see it yet.  Enlighten me ☺

Cheers,

Daniel

Reply via email to