Hi,
atm I am porting my vertx2 to vertx3 and discovered a strange issue. Vertx3 seems to block the event loop during host name resolution. If I do these requests against localhost, its not an issue.
Codepublic static void request(final Vertx vertx, final String url, final Handler<String> result) throws IOException {
HttpClient client = vertx.createHttpClient();
System.out.println("HTTP GET");
HttpClientRequest req = client.get(80, "<
my-domain.com>", url, res -> {
res.bodyHandler(body -> {
result.handle(body.toString());
});
});
System.out.println("before end()");
req.end();
System.out.println("after end()");
}
OutputHTTP GET
before end()
Jul 08, 2015 11:33:54 AM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 2831 ms, time limit is 2000
Jul 08, 2015 11:33:55 AM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 3832 ms, time limit is 2000
Jul 08, 2015 11:33:56 AM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 4831 ms, time limit is 2000
Jul 08, 2015 11:33:57 AM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 5831 ms, time limit is 2000
io.vertx.core.VertxException: Thread blocked
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getAllByName0(InetAddress.java:1255)
at java.net.InetAddress.getAllByName(InetAddress.java:1171)
at java.net.InetAddress.getAllByName(InetAddress.java:1105)
at java.net.InetAddress.getByName(InetAddress.java:1055)
at java.net.InetSocketAddress.<init>(InetSocketAddress.java:220)
at io.vertx.core.http.impl.HttpClientImpl.internalConnect(HttpClientImpl.java:653)
at io.vertx.core.http.impl.HttpClientImpl.access$000(HttpClientImpl.java:59)
at io.vertx.core.http.impl.HttpClientImpl$1.connect(HttpClientImpl.java:91)
at io.vertx.core.http.impl.ConnectionManager$ConnQueue.createNewConnection(ConnectionManager.java:154)
at io.vertx.core.http.impl.ConnectionManager$ConnQueue.getConnection(ConnectionManager.java:94)
at io.vertx.core.http.impl.ConnectionManager.getConnection(ConnectionManager.java:63)
at io.vertx.core.http.impl.HttpClientImpl.getConnection(HttpClientImpl.java:587)
at io.vertx.core.http.impl.HttpClientRequestImpl.connect(HttpClientRequestImpl.java:500)
at io.vertx.core.http.impl.HttpClientRequestImpl.write(HttpClientRequestImpl.java:640)
at io.vertx.core.http.impl.HttpClientRequestImpl.end(HttpClientRequestImpl.java:286)
at ft.crawler.crawl.RequestProcessor.request(RequestProcessor.java:40)
at ft.crawler.crawl.RequestCoordinator.process(RequestCoordinator.java:37)
at ft.crawler.crawl.RequestCoordinator.add(RequestCoordinator.java:25)
at ft.crawler.country.CountryCrawler.recursive(CountryCrawler.java:31)
at ft.crawler.country.CountryCrawler.lambda$0(CountryCrawler.java:19)
at ft.crawler.country.CountryCrawler$$Lambda$10/1993776452.accept(Unknown Source)
at java.util.Arrays$ArrayList.forEach(Arrays.java:3880)
at ft.crawler.country.CountryCrawler.<init>(CountryCrawler.java:18)
at ft.crawler.Main.lambda$0(Main.java:19)
at ft.crawler.Main$$Lambda$6/99828496.handle(Unknown Source)
at io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle(VertxImpl.java:711)
at io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle(VertxImpl.java:682)
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$15(ContextImpl.java:314)
at io.vertx.core.impl.ContextImpl$$Lambda$5/706277948.run(Unknown Source)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
at java.lang.Thread.run(Thread.java:745)