From 092cd796c78358364ed05ae54e4b3c875879393f Mon Sep 17 00:00:00 2001 From: kamcio96 Date: Mon, 14 Mar 2016 16:07:20 -0700 Subject: [PATCH] Use a worker and a boss event loop group. Merges the rest of https://github.com/SpigotMC/BungeeCord/pull/1706 by @kamcio96 along with b8845c4edbae46bb66f6adda338330a1d4032057 This is proper practice for netty. diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java index a64d916a..3501a4e9 100644 --- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java +++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java @@ -122,7 +122,7 @@ public class BungeeCord extends ProxyServer * Localization formats. */ private Map messageFormats; - public EventLoopGroup eventLoops; + public EventLoopGroup bossEventLoopGroup, workerEventLoopGroup; /** * locations.yml save thread. */ @@ -273,7 +273,8 @@ public class BungeeCord extends ProxyServer ResourceLeakDetector.setLevel( ResourceLeakDetector.Level.DISABLED ); // Eats performance } - eventLoops = PipelineUtils.newEventLoopGroup( 0, new ThreadFactoryBuilder().setNameFormat( "Netty IO Thread #%1$d" ).build() ); + bossEventLoopGroup = PipelineUtils.newEventLoopGroup( 0, new ThreadFactoryBuilder().setNameFormat( "Netty Boss IO Thread #%1$d" ).build() ); + workerEventLoopGroup = PipelineUtils.newEventLoopGroup( 0, new ThreadFactoryBuilder().setNameFormat( "Netty Worker IO Thread #%1$d" ).build() ); File moduleDirectory = new File( "modules" ); moduleManager.load( this, moduleDirectory ); @@ -362,7 +363,7 @@ public class BungeeCord extends ProxyServer .option( ChannelOption.SO_REUSEADDR, true ) // TODO: Move this elsewhere! .childAttr( PipelineUtils.LISTENER, info ) .childHandler( PipelineUtils.SERVER_CHILD ) - .group( eventLoops ) + .group( bossEventLoopGroup, workerEventLoopGroup ) .localAddress( info.getSocketAddress() ) .bind().addListener( listener ); @@ -385,7 +386,7 @@ public class BungeeCord extends ProxyServer } } }; - new RemoteQuery( this, info ).start( PipelineUtils.getDatagramChannel(), new InetSocketAddress( info.getHost().getAddress(), info.getQueryPort() ), eventLoops, bindListener ); + new RemoteQuery( this, info ).start( PipelineUtils.getDatagramChannel(), new InetSocketAddress( info.getHost().getAddress(), info.getQueryPort() ), workerEventLoopGroup, bindListener ); } } } @@ -494,12 +495,14 @@ public class BungeeCord extends ProxyServer } getLogger().info( "Closing IO threads" ); - eventLoops.shutdownGracefully(); - try - { - eventLoops.awaitTermination( Long.MAX_VALUE, TimeUnit.NANOSECONDS ); - } catch ( InterruptedException ex ) - { + bossEventLoopGroup.shutdownGracefully(); + workerEventLoopGroup.shutdownGracefully(); + while (true) { + try { + bossEventLoopGroup.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + workerEventLoopGroup.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + break; + } catch (InterruptedException ignored) {} } getLogger().info( "Thank you and goodbye" ); diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java index 671cf96f..377df7ec 100644 --- a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java +++ b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java @@ -185,7 +185,7 @@ public class BungeeServerInfo implements ServerInfo }; new Bootstrap() .channel( PipelineUtils.getChannel( socketAddress ) ) - .group( BungeeCord.getInstance().eventLoops ) + .group( BungeeCord.getInstance().workerEventLoopGroup ) .handler( PipelineUtils.BASE_SERVERSIDE ) .option( ChannelOption.CONNECT_TIMEOUT_MILLIS, BungeeCord.getInstance().getConfig().getRemotePingTimeout() ) .remoteAddress( socketAddress ) -- 2.43.0