diff --git a/BungeeCord-Patches/0040-Use-async-Netty-DNS-resolver.patch b/BungeeCord-Patches/0040-Use-async-Netty-DNS-resolver.patch new file mode 100644 index 0000000..5a771b1 --- /dev/null +++ b/BungeeCord-Patches/0040-Use-async-Netty-DNS-resolver.patch @@ -0,0 +1,111 @@ +From bf31dfa1560b2be03d92ec8ecda481ce108d49d1 Mon Sep 17 00:00:00 2001 +From: Tux +Date: Wed, 21 Dec 2016 03:13:03 -0500 +Subject: [PATCH] Use async Netty DNS resolver + +We no longer need to cache the address for the session server now. + +diff --git a/proxy/pom.xml b/proxy/pom.xml +index 1220a41..5d105b0 100644 +--- a/proxy/pom.xml ++++ b/proxy/pom.xml +@@ -25,6 +25,14 @@ + ${netty.version} + compile + ++ ++ ++ io.netty ++ netty-resolver-dns ++ ${netty.version} ++ compile ++ ++ + + io.netty + netty-handler +diff --git a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java +index 2feb4d6..7e381f5 100644 +--- a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java ++++ b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java +@@ -27,7 +27,11 @@ public class HttpClient + { + + public static final int TIMEOUT = 5000; +- private static final Cache addressCache = CacheBuilder.newBuilder().expireAfterWrite( 1, TimeUnit.MINUTES ).build(); ++ // Waterfall Start - use async resolver from Netty ++ //private static final Cache addressCache = CacheBuilder.newBuilder().expireAfterWrite( 1, TimeUnit.MINUTES ).build(); // Waterfall - remove cache ++ private static final io.netty.resolver.dns.DnsAddressResolverGroup dnsResolverGroup = ++ new io.netty.resolver.dns.DnsAddressResolverGroup(PipelineUtils.getDatagramChannel(), io.netty.resolver.dns.DnsServerAddresses.defaultAddresses()); ++ // Waterfall End + + @SuppressWarnings("UnusedAssignment") + public static void get(String url, EventLoop eventLoop, final Callback callback) +@@ -57,19 +61,22 @@ public class HttpClient + } + } + +- InetAddress inetHost = addressCache.getIfPresent( uri.getHost() ); +- if ( inetHost == null ) +- { +- try +- { +- inetHost = InetAddress.getByName( uri.getHost() ); +- } catch ( UnknownHostException ex ) +- { +- callback.done( null, ex ); +- return; +- } +- addressCache.put( uri.getHost(), inetHost ); +- } ++ // Waterfall Start: remove IP address cache ++ //InetAddress inetHost = addressCache.getIfPresent( uri.getHost() ); ++ //if ( inetHost == null ) ++ //{ ++ // try ++ // { ++ // inetHost = InetAddress.getByName( uri.getHost() ); ++ // } catch ( UnknownHostException ex ) ++ // { ++ // callback.done( null, ex ); ++ // return; ++ // } ++ // addressCache.put( uri.getHost(), inetHost ); ++ //} ++ java.net.InetSocketAddress address = java.net.InetSocketAddress.createUnresolved(uri.getHost(), port); ++ // Waterfall End + + ChannelFutureListener future = new ChannelFutureListener() + { +@@ -86,13 +93,13 @@ public class HttpClient + future.channel().writeAndFlush( request ); + } else + { +- addressCache.invalidate( uri.getHost() ); ++ // addressCache.invalidate( uri.getHost() ); // Waterfall - use async DNS resolver + callback.done( null, future.cause() ); + } + } + }; + + new Bootstrap().channel( PipelineUtils.getChannel() ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ). +- option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).remoteAddress( inetHost, port ).connect().addListener( future ); ++ option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).resolver(dnsResolverGroup).remoteAddress( address ).connect().addListener( future ); // Waterfall - use async DNS resolver + } + } +diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java +index f6a10e7..ddf598e 100644 +--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java ++++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java +@@ -103,7 +103,7 @@ public class PipelineUtils + return epoll ? EpollSocketChannel.class : NioSocketChannel.class; + } + +- public static Class getDatagramChannel() ++ public static Class getDatagramChannel() // Waterfall - change to DatagramChannel + { + return epoll ? EpollDatagramChannel.class : NioDatagramChannel.class; + } +-- +2.7.4 +