-
-
Notifications
You must be signed in to change notification settings - Fork 308
Expand file tree
/
Copy path0020-Use-a-worker-and-a-boss-event-loop-group.patch
More file actions
87 lines (78 loc) · 4.46 KB
/
0020-Use-a-worker-and-a-boss-event-loop-group.patch
File metadata and controls
87 lines (78 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
From 9d6f2e0ee7d169c1d8ea01ba2c93a35dea3cbd67 Mon Sep 17 00:00:00 2001
From: kamcio96 <k.nadworski@icloud.com>
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 52f2044f..193b4ccd 100644
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
@@ -110,7 +110,7 @@ public class BungeeCord extends ProxyServer
* Localization formats.
*/
private Map<String, Format> messageFormats;
- public EventLoopGroup eventLoops;
+ public EventLoopGroup bossEventLoopGroup, workerEventLoopGroup;
/**
* locations.yml save thread.
*/
@@ -278,7 +278,8 @@ public class BungeeCord extends ProxyServer
System.setProperty( "io.netty.allocator.type", "pooled" );
}
- 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 );
@@ -367,7 +368,7 @@ public class BungeeCord extends ProxyServer
.option( ChannelOption.SO_REUSEADDR, true ) // TODO: Move this elsewhere!
.childAttr( PipelineUtils.LISTENER, info )
.childHandler( unsafe().getFrontendChannelInitializer().getChannelInitializer() )
- .group( eventLoops )
+ .group( bossEventLoopGroup, workerEventLoopGroup )
.localAddress( info.getSocketAddress() )
.bind().addListener( listener );
@@ -390,7 +391,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 );
}
}
}
@@ -497,12 +498,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 7700f1d6..0d24f1eb 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( ProxyServer.getInstance().unsafe().getServerInfoChannelInitializer().getChannelInitializer() )
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, BungeeCord.getInstance().getConfig().getRemotePingTimeout() )
.remoteAddress( socketAddress )
--
2.51.0