On 06/21/2011 06:09 AM, Amos Jeffries wrote: > On 21/06/11 21:46, Tsantilas Christos wrote: >> On 06/19/2011 05:19 AM, Amos Jeffries wrote: >>> Comm no longer contains implicit DNS resolution. It needs to be given >>> the remote IP address before opening. >> >>> Since ServiceRep::getConnection() is strictly synchronous and assumes >>> that there is only one IP for the service. >>> >>> Xaction::openConnection() can become async so now contains: >>> "TODO: find the IPs and attempt each one if this is a named service" >>> marks the spot. >>> >>> For now it converts IP-addressed services using raw-IP text conversion >>> "remote= s.cfg().host.termedBuf()". Which is synchronous and >>> non-blocking but not resolving FQDN. >>> >>> When FQDN resolution is required do we ... >>> >>> a) split openConnection() into two async steps and only use one of the >>> possibly multiple IPs returned? >>> >>> OR >>> >>> b) lookup the DNS at some far earlier point and store the IPA in >>> ServiceRep for some sort of load balancing selection of just one by >>> getConnection()? >>> > > This just needs: > openConnection step 1 to call ipcache_nbgethostbyname() > openConnection step 2 to do something similar to > src/peer_select.cc:peerSelectDnsResults() but tuned a bit for ICAP.
For a complete fix, we also need to modify the callers to handle a two-step (i.e., async) openConnection(). AFAICT, both callers call openConnection() at the end of an already async call, so it is not a major problem, just more work. Thank you, Alex.
