eclipse-vertx / eclipse-vertx/vert.x

DNS server list not refreshed

Open
#3,861 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
14.7k
Forks
2.1k
Avg merge
1d 10h
Merged PRs (30d)
27

Description

The DNS server list should get refreshed, particularly after network interface changes, but this does not seem to happen.

An egregious case is when you start a vertx process that tries to periodically connect to a httpclient, with no network uplink (wifi disabled). The resolver selects google's IPv6 address (a questionable choice itself, but not the bug described here). When the network connection is restored, it keeps trying to use google's IPv6 address, even though there's no IPv6 on the uplink and the current configuration specifies a different list of IPv4 . Changing caching TTLs on vertx `AddressResolverOptions` does not make a difference, the process never figures out the correct DNS configuration and keeps failing with the exception below.

*Workaround*: set the `-Dvertx.disableDnsResolver=true` system property. Then the process picks up the proper DNS servers after the network link is restored.

```
Caused by: io.netty.resolver.dns.DnsNameResolverException: [/[2001:4860:4860:0:0:0:0:8888]:53] failed to send a query via UDP (no stack trace available)
Caused by: java.net.NoRouteToHostException: No route to host
at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:897)
at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:859)
at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:817)
at io.netty.channel.socket.nio.NioDatagramChannel.doWriteMessage(NioDatagramChannel.java:295)
at io.netty.channel.nio.AbstractNioMessageChannel.doWrite(AbstractNioMessageChannel.java:142)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:941)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:354)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:905)
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
at io.netty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:967)
at io.netty.channel.AbstractChannel.flush(AbstractChannel.java:242)
at io.netty.resolver.dns.DnsNameResolver.flushQueries(DnsNameResolver.java:1207)
at io.netty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:357)
at io.netty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:211)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1108)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1081)
at io.netty.resolver.dns.DnsNameResolver.doResolveAll(DnsNameResolver.java:1030)
at io.netty.resolver.dns.DnsNameResolver.doResolveAll(DnsNameResolver.java:998)
at io.netty.resolver.SimpleNameResolver.resolveAll(SimpleNameResolver.java:79)
at io.netty.resolver.dns.InflightNameResolver.resolve(InflightNameResolver.java:96)
at io.netty.resolver.dns.InflightNameResolver.resolveAll(InflightNameResolver.java:71)
at io.netty.resolver.dns.InflightNameResolver.resolveAll(InflightNameResolver.java:56)
at io.netty.resolver.RoundRobinInetAddressResolver.doResolve(RoundRobinInetAddressResolver.java:55)
at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:61)
at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:53)
at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:55)
at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:31)
at io.netty.resolver.AbstractAddressResolver.resolve(AbstractAddressResolver.java:106)
at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:206)
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:162)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:139)
at io.vertx.core.net.impl.ChannelProvider.handleConnect(ChannelProvider.java:154)
at io.vertx.core.net.impl.ChannelProvider.connect(ChannelProvider.java:104)
at io.vertx.core.net.impl.ChannelProvider.connect(ChannelProvider.java:90)
at io.vertx.core.net.impl.NetClientImpl.doConnect(NetClientImpl.java:230)
at io.vertx.core.http.impl.HttpChannelConnector.connect(HttpChannelConnector.java:90)
at io.vertx.core.http.impl.HttpChannelConnector.httpConnect(HttpChannelConnector.java:146)
at io.vertx.core.http.impl.WebSocketEndpoint.tryConnect(WebSocketEndpoint.java:86)
at io.vertx.core.http.impl.WebSocketEndpoint.requestConnection2(WebSocketEndpoint.java:99)
at io.vertx.core.http.impl.ClientHttpEndpointBase.requestConnection(ClientHttpEndpointBase.java:55)
at io.vertx.core.net.impl.clientconnection.Endpoint.getConnection(Endpoint.java:41)
at io.vertx.core.net.impl.clientconnection.ConnectionManager.getConnection(ConnectionManager.java:48)
at io.vertx.core.http.impl.HttpClientImpl.webSocket(HttpClientImpl.java:301)
at io.vertx.core.http.impl.HttpClientImpl.webSocket(HttpClientImpl.java:286)
at io.vertx.core.http.impl.HttpClientImpl.webSocketAbs(HttpClientImpl.java:396)
at io.vertx.core.http.impl.HttpClientImpl.webSocketAbs(HttpClientImpl.java:345)
at simlis.firehose.Firehose.connect(Firehose.java:71)
at simlis.firehose.Firehose.lambda$9(Firehose.java:106)
at io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle(VertxImpl.java:951)
at io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle(VertxImpl.java:918)
at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:52)
at io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:294)
at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:24)
at io.vertx.core.impl.AbstractContext.emit(AbstractContext.java:49)
at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:24)
at io.vertx.core.impl.VertxImpl$InternalTimerHandler.run(VertxImpl.java:941)
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:832)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.