is_address_reuseable is a flag noting whether or not
the address has an ability; disablereuse is a setting
which allows the sysadmin to bypass that setting no matter
what and, eventually, could be something set/reset in
real-time via the balancer-manager.

For example, I have a driver's license so "can_jim_drive" is
TRUE; however, after several shots of Balvenie doublewood 12,
the "disable_jim_from_driving" should be changed from FALSE to TRUE :)

On Jan 24, 2014, at 12:56 PM, Yann Ylavic <[email protected]> wrote:

> On Fri, Jan 24, 2014 at 2:07 PM, Jim Jagielski <[email protected]> wrote:
> Hmmm from what I can see, if we have a hostname and the address
> is re-usable, we do stuff we shouldn't.
> 
> The patch does nothing in the case you mention (like the original code), but 
> I guess you meant "we have a hostnane and the address is *not* reusable". In 
> which case the patch does nothing either, whereas the original code 
> overwrittes the hostname, close the socket and then issues a new DNS lookup.
> 
> That's indeed more than applying the De Morgan's law, but maybe I can explain 
> why this is still a streamlining of the whole connections/adresses reuse 
> logic.
> 
> First let me stress that currently, !is_address_reusable is strictly 
> equivalent to disablereuse, they imply the same paths everywhere.
> Whenever one or the other is in action (!is_address_reusable || disablereuse) 
> the connection *and* address are never reused, and when both are not in 
> action (is_address_reusable && !disablereuse) the connection *and* address 
> are always reused.
> Disabling socket reuse only will still issue a DNS lookup for each request.
> Disabling address reuse only will still close the socket when done.
> 
> Hence there is no distinction between connection and address reuse, the 2 
> flags could be merged into a single one, although it would make sense to keep 
> both and make them do what they mean :
> 1. disablereuse: close the socket on release; ignore the flag on acquire 
> (just compare conn->sock with NULL)
> 2. !is_address_reusable: resolve address on acquire (unconditionnaly), and if 
> the socket is reused compare with its address (sockaddr_equal) and close it 
> on mismatch; ignore the flag on release (just compare conn->hostname/addr 
> with NULL)
> 3. the current behaviour is implied by 1. and 2. when is_address_reusable == 
> !disablereuse
> 
> Any thoughts?
> 
> As you can see, my proposed patch is influenced by my current work on 
> addresses' lifetime (DNS lookups), for which I feel quite unconfortable with 
> the current/mixed "reuse" implementation.
> 
> Back to the patch then...
> It indeed assumes that when the hostname is not NULL, the connection 
> (address/socket) is reusable (otherwise it would have been cleared/zeroed on 
> release).
> Hence it will never issue a DNS lookup nor socket close in that case (not 
> cleared => reusable).
> Thus, the single/per-request DNS lookup is done only when hostname is NULL, 
> and solely depends on worker's reuse parameters.
> I don't think it breaks anything, unless one (not httpd AFAICT) forces 
> conn->hostname to something which is not to be taken into account...
> 
>  
> r1560979 is my streamlining...
> 
> Yes, nice De Morgan's law.
> 
> Do you plan to address my comment regarding conn->hostname's leak on 
> http://mail-archives.apache.org/mod_mbox/httpd-dev/201401.mbox/%3ccakq1svpt_-+cndcgh95pt4adf30kn6+wjal3w15qorewapr...@mail.gmail.com%3E
>  ?
> 
>  
> 
> Thx for the idea
>  
> Yw. I'll come back with the patch described above (distinct socket/address 
> reuse) if it sounds applicable.
> Comments on this are welcome...
> 
> Regards,
> Yann.
> 

Reply via email to