On Fri, Aug 1, 2014 at 1:23 PM, Branko Čibej <br...@wandisco.com> wrote:

>  On 01.08.2014 13:07, Stefan Fuhrmann wrote:
>
>  [...]


> Ack, thanks for the explanation!
>
> I'm currently working on the improved parser and an in-memory
> representation that should make generating the per-user filtered rules much
> easier and faster. I'm not quite ready to commit right now, since I'm in
> the middle of the second iteration of the in-memory struct design. :)
>

Excellent timing! I was about to give it a go over the weekend
but there are plenty of other things left for me to look into.

So far, I've done some scalability measurement and there is
a series of upcoming patches. I'll summarize in a separate post.
Things I've found during profiling that you might consider in your
design:

* svn_config_enumerate2 accounts for more than 50%
  of the model filtering overhead. It's a mix of section lookup,
  iteration pool handling, hash iteration etc. end up being a
  massive overhead compared to the "is this name relevant"
  check that the actual callback wants to do.
  So, an array that could be iterated over directly would be nice.

* The parser context uses svn_stringbuf_t for parsed data.
  The parser interface should expose those - if only to provide
  the consumer with length info. It would even be o.k. for the
  consumer to modify / scrap the buffer contents if they feel
  the need.

* Try to do most of authz verification as part of the parsing.
  Again, iteration and lookup are expensive here.

* The filtered tree can be constructed more quickly if the
  path rules are usually in path-order, i.e. there will soon be
  a shortcut that works for sibling paths. Once more, iteration
  in sorted or original file order would be a good thing here.


> I'm doing this in new source files (will be authz_parse.c and
> authz-test.c) so changing authz.c is fine for now.
>

I estimate to be done with my commits by Sunday and then
see what happens.

-- Stefan^2.

Reply via email to