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

Reply via email to