[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [users@httpd] mod_ratelimit working by steps ?


Hi Yann!

2018-06-18 12:04 GMT+02:00 Yann Ylavic <ylavic.dev@xxxxxxxxx>:
Hi Luca,

On Sat, Jun 16, 2018 at 8:56 AM, Luca Toscano <toscano.luca@xxxxxxxxx> wrote:
>
> While reading the code I didn't get if one particular use case may or may
> not happen at all, it is the only big doubt that I have before committing.
> Is it possible that the first bb to process (during the first invocation of
> the filter) is equal to the chunk_size + ctx->burst? IIUC the code relies on
> the fact that bb is not empty to decide whether or not to pass ctx->tmpp to
> the next filter in the chain, but if this is not the case then it may loop?

I'm not sure to follow, a loop in mod_ratelimit's filter itself?
1/ If bb is given empty then the filter does nothing (AFAICT), this
should not happen but it's not each filter's business to handle the
case either (just not crash or loop indefinitely of course).
2/ If bb is less than chunk_size + burst bytes, then data are retained
in holdingbb until the next call (provided not EOS/FLUSH and so
on...).
3/ If bb is greater or equal to chunk_size + burst bytes (the case you
are talking about AIUI), then each chunk is sent rate limited and
either 1/ or 2/ applies for the rest.

Which case exactly do you care about?

Thanks for the patience! You are of course correct, I didn't put the use case that I had in mind into a proper context. Basically I was worried that this may have happened:

1) brigade with something less or equal than chunk size + burst
2) apr_brigade_partition returning the brigade's sentilel
3) no EOS and bb empty, nothing passed to the next filter
4) data saved in holdingbb
5) next filter invocation, holdingbb moved to bb, back to 1) ...

While writing it down it is of course clear that a loop cannot happen, because even if 1-4) happens, then there will be another filter invocation that will either bring EOS or more data, that will make things go forward.

It was a stupid doubt but I understood a lot of things, I'll try to avoid spamming the mailing list the next time :D

Will commit your patch as soon as possible!

Luca