Oh, another element is that to see the behavior, your local hostname has to not have an entry in /etc/hosts. Adding it is one of the workarounds. My /etc/hosts has a localhost entry that does not include the name my machine ends up with after boot.
I'm also on 10.13, so I don't think that's the issue per se. When I run scutil --dns. I get a resolver that points to en01 with some names on my VPN, and a number of mdns registrations that all look like this, where the resolver number, the domain and the order change, but the rest of the fields stay the same. resolver #2 domain : local options : mdns timeout : 5 flags : Request A records reach : 0x00000000 (Not Reachable) order : 300000 On Fri, Apr 5, 2019 at 10:14 AM Michael McMahon < michael.x.mcma...@oracle.com> wrote: > I've spent some time trying to reproduce this on 10.13 but have not been > able. > I have disabled all the services as suggested (including some additional) > such that the dns-sd command produces no output "records" and also by > disabling unicast DNS access. > > I wonder if there has been a change in 10.13 to workaround this problem > as I don't see any delay or external MDNS lookups happening. > . > Could you send me the output of "scutil --dns" of your laptop? > At the same time, I will ask some colleagues here who might be running > 10.12 > to try it out. > > Thanks, > Michael > > On 04/04/2019, 18:38, Nora Howard wrote: > > Here's the diff http://cr.openjdk.java.net/~tonyp/8170910/webrev.0/ > > To setup an env to reproduce the issue, on a OSX machine with >= 10.12, > turn off services that register with mDNS. For my laptop, I had to turn off > iTunes and General System Preferences, disable "Allow Handoff between this > Mac and your iCloud services". You might have to restart. The reporter on > the ticket said to run `dns-sd -lo -B _services._dns-sd._udp local` to see > whether you have any running. > > The file I used for exercising the behavior looks like this > > import java.net.InetAddress; > public class Test { > public static void main(String[] args) throws Exception { > for (int i=0;i<4;i++){ > long start = System.currentTimeMillis(); > InetAddress localHost = InetAddress.getLocalHost(); > System.out.println(localHost); > System.out.println(System.currentTimeMillis() - start); > }}} > > The output I get on my laptop when I've set things up this way looks like > this on JDK 13 EA. The first call takes the full 5 seconds and subsequent > ones hit a cache. > > nhoward.local/10.0.0.3 > 5044 > nhoward.local/10.0.0.3 > 0 > nhoward.local/10.0.0.3 > 0 > nhoward.local/10.0.0.3 > 0 > > On JDK 8, each request takes 5 seconds. JDK 8's address lookup cache works > differently. It's localhost name cache expiry is 5 seconds. > > > > On Thu, Apr 4, 2019 at 2:41 AM Michael McMahon < > michael.x.mcma...@oracle.com> wrote: > >> Hi Nora, >> >> At first sight, the approach sounds reasonable to me. I'd like to see the >> patch >> and also do you have detailed instructions on how to reproduce the issue >> (the 5 second delay)? >> >> Thanks, >> Michael. >> >> On 03/04/2019, 17:46, Nora Howard wrote: >> >> I'd initially sent this to jdk-dev, but I was asked to move it to net-dev. >> >> On OSX 10.12 or later, when no mDNS services are registered, getaddrinfo >> fails on looking up localhost addresses[1]. The jdk’s current >> implementation falls back to getifaddrs after getaddrinfo fails[2]. When >> getaddrinfo fails in this way, it takes 5 seconds to fail [3]. This means >> that calls to InetAddress.getLocalHost() may take up to 5 seconds to run. >> >> I’d like to change the jdk’s behavior in this instance so that instead of >> falling back to calling getifaddrs after getaddrinfo fails, it instead >> calls getifaddrs first if we’re on OSX and the hostname is localhost’s. >> >> Doing this will eliminate the 5 second delay looking up localhost on >> machines with this network setup. When looking up non-localhost addresses, >> it’ll add a call to os:gethostname and a comparison. >> >> I’d like to get some feedback about whether this approach sounds >> reasonable, and some guidance about next steps. I’ve read the “how to >> contribute” page[4], and the “code review” guide[5]. >> >> I’ve put together a patch that I’ve tested locally by turning off mDNS >> services on my local OSX machine and exercising the behavior. I’d like to >> submit patches that target dev trunk as well as the jdk 8 and 11 branches. >> >> References >> >> 1. >> >>> On a Macintosh running 10.12 or later, if there are no apps that have a >>> mDNS services registered (for instance, iTunes) and there are no services >>> selected in the Sharing System Preferences, then the getaddrinfo will fail. >>> >> (https://bugs.openjdk.java.net/browse/JDK-8170910) >> >> 2. >> http://hg.openjdk.java.net/jdk/jdk/file/cd3b7ad53265/src/java.base/unix/native/libnet/Inet6AddressImpl.c#l252 >> http://hg.openjdk.java.net/jdk/jdk/file/cd3b7ad53265/src/java.base/unix/native/libnet/Inet4AddressImpl.c#l132 >> (The lookupIfLocalhost function checks the passed hostname against >> os::get_host_name, and if they match, looks up via getifaddrs.) >> >> 3. This comment describes how to reproduce the issue. I’ve reproduced it >> locally on jdk 8, 11 and 13 ea. >> https://bugs.openjdk.java.net/browse/JDK-8170910?focusedCommentId=14038262&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14038262 >> >> 4. https://openjdk.java.net/contribute/ >> >> 5. https://openjdk.java.net/guide/codeReview.html >> >> Thanks, >> -- >> Nora >> >> > > -- > Nora > > -- Nora