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. >
