Hello Willy,

   I wanted to ask you permission, on whether it was ok to blog about this
change, once it was committed on  Tumblr's engineering blog [1]. I can do
so after the changes are in and have your permission on it.

Thanks
Bhaskar

[1] http://engineering.tumblr.com/


On Wed, Nov 13, 2013 at 9:41 AM, Bhaskar Maddala <[email protected]> wrote:

> Hello Willy,
>
>    Thanks for your comments,
>
> > 1/4 :
> > - OK in principle. I have rearranged the doc changes in order not to
> >   overrun the 80-column limit. I also found that naming the new flags
> >   BE_LB_HALG_* was clearer than BE_LB_HF_* since they're only used to
> >  define the algorithm. I have a patch for this that I can merge with
> >   yours if you agree.
>
>   Sounds good.
>
>
> >  - I'm having an minor comment on this code below in cfgparse.c :
>
> >   +    /* clear the algorithm without discard hash function type */
> >   +    curproxy->lbprm.algo &= (~BE_LB_ALGO | (curproxy->lbprm.algo &
> BE_LB_HF_TYPE));
>
> >   Indeed, it can simply be written this way :
>
> >   +    curproxy->lbprm.algo &= ~BE_LB_ALGO | BE_LB_HF_TYPE;
>
> Yep correct, I do not know why I did that :-)
>
>
> >   Also, I find it a bit confusing that the whole block starting with this
> >   line has been moved to its own block. I think it would have been
> clearer
> >   if the tests were still organized by hash subject and simply perform
> the
> >   "curproxy->lbprm.algo &= ~BE_LB_ALGO | BE_LB_HF_TYPE" in each of them
> just
> >   like there's already "&= ~BE_LB_ALGO" everywhere.
>
> OK, I did move the block specifically to avoid repeating the line, but am
> happy to have it either way.
>
> >  - Just a detail, but the gen_hash() function should probably take the
> proxy
> >     as the first parameter so that it's immediately clear that it
> applies to
> >     something related to the proxy. BTW, it will have the same prototype
> as
> >     the other functions such as get_server_uh() etc this way.
>
> +1. I was not paying attention to the order of function arguments. proxy
> as first
> definitely makes sense.
>
>
> >    - given the numbers you've shown, I'm still not convinced about the
> real
> >     benefit of including wt6 here. The initial purpose of such a hash
> algorithm
> >     was to make it less predictable than others which do a simple
> multiply or
> >     xor. But if in the end nobody uses it because it's less smooth,
> there is no
> >     point merging it, what do you think ?
>
> No concerns at all. I/We do only really care about DJB2. I left it in there
> so that you had an opportunity to take a look at the code + results and
> decide.
>
> > 2/4 :
> >   - I really like your principle of keeping the default settings
> compatible
> >     with current implementations. That said, I still think that since 1.4
> >     does not have the full avalanche with consistent hashing, we should
> >     probably not enable it by default anymore. In fact, 1.4 is the only
> >     stable version right now (and it's the same as the one you're using).
> >     People who use 1.5-dev are used to be careful in their upgrades. So I
> >     think that it would be better to remove the avalanche by default even
> >     when doing a consistent hash. That way it will not change anything
> for
> >     people migrating from 1.4 to 1.5. And the current 1.5-dev users will
> be
> >     able to get the same behaviour as today by explicitly adding
> "avalanche"
> >     on the hash-type line. It will also make the directive behave in a
> much
> >     more consistent way.
>
> I have no concerns over this. I might have misunderstood one of our
> conversations as implying that backward compatibility was a requirement.
> If anything the code in cfgparse is a little more confusing to understand
> when
> attempting to maintain backwards compatibility.
>
> > 3/4 :
> >  - same comment as 1/4 about the computation, otherwise it's obviously
> OK.
> >    It should be merged into 2/4 since 2/4 alone is not correct without
> it.
>
> +1. Yes, I spent about 1/2 a day pulling my hair on this before I realized
> what I
> was doing wrong.
>
> > Now what I can propose :
>
> >   - I adjust the doc in your first patch to fix the 80-column limit ;
> >   - I rename the flags as mentionned above ;
> >   - I merge 2/4 with 3/4
> >   - I remove WT6 for now
> >   - I disable avalanche for consistent only (and adjust the doc
> accordingly)
> >   - And I merge everything on my own. It's the easiest thing to do for
> me at
> >     the moment.
>
> Unless you would like me to make the changes, I am more than happy for you
> to merge in everything, as it seems you have already made the edits.
>
>
> > Note, I found that your spreadsheet was very useful and it would be nice
> to
> > have either a link to it in the commit (if the link is permanent, I don't
> > know) or just a text-only copy of it in the "tests" directory.
>
> I will send you a CSV to add to tests later today, that is the safe bet on
> this.
>
> Once again, thank you.
>
> Thanks
> Bhaskar
>
>
> On Wed, Nov 13, 2013 at 8:34 AM, Willy Tarreau <[email protected]> wrote:
>
>> Hi Bhaskar,
>>
>> sorry for the long delay. Yesterday I found some time to come back to
>> your patches.
>>
>> First, I want to thank you for all the well documented work you've done
>> on this subject, that's really great.
>>
>> I'm having some comments, both on the implementation and the code itself.
>>
>> 1/4 :
>>  - OK in principle. I have rearranged the doc changes in order not to
>>    overrun the 80-column limit. I also found that naming the new flags
>>    BE_LB_HALG_* was clearer than BE_LB_HF_* since they're only used to
>>    define the algorithm. I have a patch for this that I can merge with
>>    yours if you agree.
>>
>>
>>  - I'm having an minor comment on this code below in cfgparse.c :
>>
>>    +    /* clear the algorithm without discard hash function type */
>>    +    curproxy->lbprm.algo &= (~BE_LB_ALGO | (curproxy->lbprm.algo &
>> BE_LB_HF_TYPE));
>>
>>    Indeed, it can simply be written this way :
>>
>>    +    curproxy->lbprm.algo &= ~BE_LB_ALGO | BE_LB_HF_TYPE;
>>
>>    Also, I find it a bit confusing that the whole block starting with this
>>    line has been moved to its own block. I think it would have been
>> clearer
>>    if the tests were still organized by hash subject and simply perform
>> the
>>    "curproxy->lbprm.algo &= ~BE_LB_ALGO | BE_LB_HF_TYPE" in each of them
>> just
>>    like there's already "&= ~BE_LB_ALGO" everywhere.
>>
>>  - Just a detail, but the gen_hash() function should probably take the
>> proxy
>>    as the first parameter so that it's immediately clear that it applies
>> to
>>    something related to the proxy. BTW, it will have the same prototype as
>>    the other functions such as get_server_uh() etc this way.
>>
>>  - given the numbers you've shown, I'm still not convinced about the real
>>    benefit of including wt6 here. The initial purpose of such a hash
>> algorithm
>>    was to make it less predictable than others which do a simple multiply
>> or
>>    xor. But if in the end nobody uses it because it's less smooth, there
>> is no
>>    point merging it, what do you think ?
>>
>>
>> 2/4 :
>>   - I really like your principle of keeping the default settings
>> compatible
>>     with current implementations. That said, I still think that since 1.4
>>     does not have the full avalanche with consistent hashing, we should
>>     probably not enable it by default anymore. In fact, 1.4 is the only
>>     stable version right now (and it's the same as the one you're using).
>>     People who use 1.5-dev are used to be careful in their upgrades. So I
>>     think that it would be better to remove the avalanche by default even
>>     when doing a consistent hash. That way it will not change anything for
>>     people migrating from 1.4 to 1.5. And the current 1.5-dev users will
>> be
>>     able to get the same behaviour as today by explicitly adding
>> "avalanche"
>>     on the hash-type line. It will also make the directive behave in a
>> much
>>     more consistent way.
>>
>>   - I would use "BE_LB_HMOD_AVAL" for the name of the hash modifier flag.
>>
>> 3/4 :
>>   - same comment as 1/4 about the computation, otherwise it's obviously
>> OK.
>>     It should be merged into 2/4 since 2/4 alone is not correct without
>> it.
>>
>>
>> 4/4 :
>>   - OK as well, modulto the 80-char limit which I have already fixed in
>> the
>>     review I started yesterday.
>>
>>
>> Now what I can propose :
>>
>>   - I adjust the doc in your first patch to fix the 80-column limit ;
>>   - I rename the flags as mentionned above ;
>>   - I merge 2/4 with 3/4
>>   - I remove WT6 for now
>>   - I disable avalanche for consistent only (and adjust the doc
>> accordingly)
>>   - And I merge everything on my own. It's the easiest thing to do for me
>> at
>>     the moment.
>>
>> Alternative : you want to rework some things and to submit another round.
>>
>> Note, I found that your spreadsheet was very useful and it would be nice
>> to
>> have either a link to it in the commit (if the link is permanent, I don't
>> know) or just a text-only copy of it in the "tests" directory.
>>
>> Thanks!
>> Willy
>>
>>
>

Reply via email to