[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-1476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13291634#comment-13291634
 ] 

Jilles van Gurp commented on ZOOKEEPER-1476:
--------------------------------------------

Here's a small program that replicates the problem. If I execute it, I get the 
following output:

/etc/hosts:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0     localhost

localhost resolved in 1ms. to localhost
localhost resolved in 1ms. to localhost
fe80:0:0:0:0:0:0:1%1 resolved in 5002ms. to fe80:0:0:0:0:0:0:1%1
java.lang.IllegalStateException: localhost resolves to fe80:0:0:0:0:0:0:1%1 but 
reverse dns lookup takes too long 5002 resolved back to fe80:0:0:0:0:0:0:1%1
        at 
com.nokia.search.test.LocalhostLookupTest.main(LocalhostLookupTest.java:28)

If I preresolve localhost to 127.0.0.1, the exception never gets thrown.


import java.io.BufferedReader;
import java.io.FileReader;
import java.net.InetAddress;

public class LocalhostLookupTest {
    public static void main(String[] args) {
        try {
            InetAddress[] addresses = InetAddress.getAllByName("localhost");
            
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader("/etc/hosts"));
                StringBuilder buf = new StringBuilder();
                String line;
                while((line = br.readLine()) != null) {
                    buf.append(line + '\n');
                }
                String hostsFile = buf.toString();
                System.out.println("/etc/hosts:\n"+hostsFile);
                for (InetAddress inetAddress : addresses) {
                    long now = System.currentTimeMillis();
                    String hostName = inetAddress.getCanonicalHostName();
                    long duration = System.currentTimeMillis() - now;
                    System.out.println(hostName + " resolved in " + duration + 
"ms. to " + hostName);
                    if(duration > 50) {
                        throw new IllegalStateException("localhost resolves to 
" + inetAddress.getHostAddress() + " but reverse dns lookup takes too long " + 
duration + " resolved back to " + hostName);
                    }
                }
            } finally {
                br.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.exit(0);
        }
    }
}
                
> ipv6 reverse dns related timeouts on OSX connecting to localhost
> ----------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1476
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1476
>             Project: ZooKeeper
>          Issue Type: Bug
>            Reporter: Jilles van Gurp
>            Priority: Minor
>
> We observed a weird, random issue trying to create zookeeper client 
> connections on osx. Sometimes it would work and sometimes it would fail. Also 
> it is randomly very slow. It turns out both issues have the same cause.
> My hosts file on osx (which is an unmodified default one), lists three 
> entries for localhost:
> 127.0.0.1     localhost
> ::1             localhost 
> fe80::1%lo0   localhost
> We saw zookeeper trying to connect to fe80:0:0:0:0:0:0:1%1 sometimes, which 
> is not listed (actually one in four times, it seems to round robin over the 
> addresses). 
> Whenever that happens, it sometimes works and sometimes fails. In both cases 
> it's very slow. Reason: the reverse lookup for fe80:0:0:0:0:0:0:1%1 can't be 
> resolved using the hosts file and it falls back to actually using the dns. 
> Sometimes it actually works but other times it fails/times out after about 5 
> seconds. Probably a platform specific settings with dns setup hide this 
> problem on linux. 
> As a workaround, we preresolve localhost now: 
> Inet4Address.getByName("localhost"). This always resolves to 127.0.0.1 on my 
> machine and works fast.
> This fixes the issue for us. We're not sure where the fe80:0:0:0:0:0:0:1%1 
> address comes from though. I don't recall having this issue with other server 
> side software so this might be a mix of platform setup, osx specific 
> defaults, and zookeeper behavior.
> I've seen one ticket that relates to ipv6 in zookeeper that might be related: 
> ZOOKEEPER-667. Perhaps the workaround for that ticket introduced this 
> problem? 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to