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
Received on 2015-12-31 01:37:53 CET