Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move the "Avoid block on Network Manager creation" patch up and cleanup the patch #217

Merged
merged 1 commit into from
Jul 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,46 +1,43 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <[email protected]>
Date: Wed, 3 Nov 2021 19:45:25 -0400
Date: Mon, 16 May 2016 23:19:16 -0400
Subject: [PATCH] Avoid blocking on Network Manager creation

Per Paper issue 294

diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java
index 3910bafa064017f7b3966fec8e6139493d8333e2..74e3b21c29cc208f53113d791513714f8224fad9 100644
index 578d03ead09c3c126fcd2da0657e1d94dbba9840..180b1432e8fbbc516ecfb60ba2da4cd319d85a97 100644
--- a/src/main/java/net/minecraft/server/ServerConnection.java
+++ b/src/main/java/net/minecraft/server/ServerConnection.java
@@ -63,6 +63,16 @@ public class ServerConnection {
@@ -61,6 +61,15 @@ public class ServerConnection {
public volatile boolean d;
private final List<ChannelFuture> g = Collections.synchronizedList(Lists.<ChannelFuture>newArrayList());
private final List<NetworkManager> h = Collections.synchronizedList(Lists.<NetworkManager>newArrayList());
private static final boolean disableFlushConsolidation = Boolean.getBoolean("Paper.disableFlushConsolidate"); // PandaSpigot

+ // PandaSpigot start - prevent blocking on adding a new network manager while the server is ticking
+ // PandaSpigot start - Prevent blocking on adding a new network manager while the server is ticking
+ private final java.util.Queue<NetworkManager> pending = new java.util.concurrent.ConcurrentLinkedQueue<>();
+ private void addPending() {
+ NetworkManager manager;
+ NetworkManager manager = null;
+ while ((manager = pending.poll()) != null) {
+ manager.isPending = false;
+ this.h.add(manager);
+ h.add(manager);
+ }
+ }
+ // PandaSpigot end

public ServerConnection(MinecraftServer minecraftserver) {
this.f = minecraftserver;
this.d = true;
@@ -107,8 +117,11 @@ public class ServerConnection {
if (!disableFlushConsolidation) channel.pipeline().addFirst(new io.netty.handler.flush.FlushConsolidationHandler()); // PandaSpigot
@@ -106,7 +115,10 @@ public class ServerConnection {
channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(ServerConnection.this)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND));
NetworkManager networkmanager = new NetworkManager(EnumProtocolDirection.SERVERBOUND);
-
- ServerConnection.this.h.add(networkmanager);
+
+ // PandaSpigot start - prevent blocking on adding a new network manager while the server is ticking
+ //ServerConnection.this.h.add(networkmanager);
+ ServerConnection.this.pending.add(networkmanager);
+ // PandaSpigot start
+ // ServerConnection.this.h.add(networkmanager);
+ pending.add(networkmanager);
+ // PandaSpigot end
channel.pipeline().addLast("packet_handler", networkmanager);
networkmanager.a((PacketListener) (new HandshakeListener(ServerConnection.this.f, networkmanager)));
}
@@ -136,6 +149,7 @@ public class ServerConnection {
@@ -134,6 +146,7 @@ public class ServerConnection {
List list = this.h;

synchronized (this.h) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -388,18 +388,23 @@ index fdc142b75b78289f01a9e9fed6f36432624735db..bb18dac7a3554a8a6cb93d24bc539901
+ // PandaSpigot end
}
diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java
index 578d03ead09c3c126fcd2da0657e1d94dbba9840..3910bafa064017f7b3966fec8e6139493d8333e2 100644
index 180b1432e8fbbc516ecfb60ba2da4cd319d85a97..e390ceef529d98c10bc467ed5517e1ab17b336e0 100644
--- a/src/main/java/net/minecraft/server/ServerConnection.java
+++ b/src/main/java/net/minecraft/server/ServerConnection.java
@@ -61,6 +61,7 @@ public class ServerConnection {
public volatile boolean d;
private final List<ChannelFuture> g = Collections.synchronizedList(Lists.<ChannelFuture>newArrayList());
@@ -63,10 +63,12 @@ public class ServerConnection {
private final List<NetworkManager> h = Collections.synchronizedList(Lists.<NetworkManager>newArrayList());
// PandaSpigot start - Prevent blocking on adding a new network manager while the server is ticking
private final java.util.Queue<NetworkManager> pending = new java.util.concurrent.ConcurrentLinkedQueue<>();
+ private static final boolean disableFlushConsolidation = Boolean.getBoolean("Paper.disableFlushConsolidate"); // PandaSpigot

public ServerConnection(MinecraftServer minecraftserver) {
this.f = minecraftserver;
@@ -103,6 +104,7 @@ public class ServerConnection {
private void addPending() {
NetworkManager manager = null;
while ((manager = pending.poll()) != null) {
h.add(manager);
+ manager.isPending = false;
}
}
// PandaSpigot end
@@ -112,6 +114,7 @@ public class ServerConnection {
;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Only make one flush call when emptying the packet queue too.
This patch will be used to optimise out flush calls in later patches.

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index d4bf50c990f3af95225aba2e05269ab9dd2d96ff..e84611e59c7e365e312b51d888dafc75f4aacbbc 100644
index 067793583980d102f8310f6197a52d2f126d15d4..da76acafb5ffaea16f6a4dc28122c82f41bed318 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -80,6 +80,38 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ up on this optimisation before he came along.
Locally this patch drops the entity tracker tick by a full 1.5x.

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index a23b96476acd2b01464a61e716277157aba4c979..1dfd9f5ed6c2d5dd8735a4f01fe4c6c8ac14dbf3 100644
index da76acafb5ffaea16f6a4dc28122c82f41bed318..ae7c6e289c8a6d9f8bdd4911e90e2ef9840069a2 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -304,8 +304,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ flushing on the netty event loop, so it won't do the flush on the main thread.
Renable flushing by passing -Dpaper.explicit-flush=true

diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 1dfd9f5ed6c2d5dd8735a4f01fe4c6c8ac14dbf3..df8ff41f691626de37f706df187269bee032358f 100644
index ae7c6e289c8a6d9f8bdd4911e90e2ef9840069a2..d547fe7b3a1e2355043a82cec9d40b69b2e410b0 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -74,6 +74,7 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ the updates per world, so that we can re-use the same packet
object for every player unless they have per-player time enabled.

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index c7b6bc4eb4103af9e3385b88984271a009ef5afc..f5bd918aad71d8f1c24c39bb786ef91eed7372b2 100644
index 06e023994050a07d2efed174b1fbd8f1eddcd231..8f394d5fe6f0f0640a942f15ae69582bfd70b4c8 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -899,12 +899,24 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable time update frequency.


diff --git a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
index 0e781b78cb37bd85f9f753bd351d7c724a561bd7..023820936a0684c97fefb115e7ab10d35413ce6f 100644
index 3dd3d0702c17541083d0d365ca46e93602105bce..b5f16e8cab9e43ad7597b2ea5bc921399b37872b 100644
--- a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
+++ b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
@@ -6,6 +6,13 @@ import org.spongepowered.configurate.objectmapping.meta.Comment;
Expand All @@ -23,7 +23,7 @@ index 0e781b78cb37bd85f9f753bd351d7c724a561bd7..023820936a0684c97fefb115e7ab10d3
public KnockbackConfig knockback;

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index f5bd918aad71d8f1c24c39bb786ef91eed7372b2..9e3bb94f11263c4614f18c282ae236d03599619a 100644
index 8f394d5fe6f0f0640a942f15ae69582bfd70b4c8..b7decb879f530345b82722aeb1294864feecd2c2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -906,7 +906,7 @@ public abstract class MinecraftServer extends com.hpfxd.pandaspigot.tickloop.Ree
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ will send a relative teleport packet indicating that the player's
rotation should stay the same as it currently is on the client.

diff --git a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
index 023820936a0684c97fefb115e7ab10d35413ce6f..29c74482046bdba073c68c3baeea010f1e134b51 100644
index b5f16e8cab9e43ad7597b2ea5bc921399b37872b..bde014f003bccca916dbc74fc27436bf4b193fdf 100644
--- a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
+++ b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
@@ -13,6 +13,15 @@ public class PandaSpigotWorldConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This patch adds configuration options for:
- Region writing (world data)

diff --git a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
index 29c74482046bdba073c68c3baeea010f1e134b51..75f46d3db814ae48e8a1a12884aacb8bf5afe017 100644
index bde014f003bccca916dbc74fc27436bf4b193fdf..fb9db2dafcf180dbb25c768936cb59a58a7a3584 100644
--- a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
+++ b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
@@ -22,6 +22,15 @@ public class PandaSpigotWorldConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity AI


diff --git a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
index 75f46d3db814ae48e8a1a12884aacb8bf5afe017..1d35967a27245ab12ea76db9218662eb6a4b8306 100644
index fb9db2dafcf180dbb25c768936cb59a58a7a3584..04f04ce721aa06fba935618176c77587e305a5b0 100644
--- a/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
+++ b/src/main/java/com/hpfxd/pandaspigot/config/PandaSpigotWorldConfig.java
@@ -31,6 +31,11 @@ public class PandaSpigotWorldConfig {
Expand Down
6 changes: 3 additions & 3 deletions patches/server/0038-Optimize-VarInt-reading-and-writing.patch
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ index c51a1f7d1a57acde1e5c7378fe35c30547107052..3f9cdbff6746ed0776b32d9649e5689f
}
}
diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java
index dfe92f3cb3a5b02ee2480beb7e49f0c02acfa47f..0bcf1d732e2263471f741a3c634a020c758845d4 100644
index e390ceef529d98c10bc467ed5517e1ab17b336e0..d36914ec45056328308bb77878a006df4b5e59bd 100644
--- a/src/main/java/net/minecraft/server/ServerConnection.java
+++ b/src/main/java/net/minecraft/server/ServerConnection.java
@@ -115,7 +115,14 @@ public class ServerConnection {
Expand All @@ -334,5 +334,5 @@ index dfe92f3cb3a5b02ee2480beb7e49f0c02acfa47f..0bcf1d732e2263471f741a3c634a020c
+ .addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND));
+ // PandaSpigot end
NetworkManager networkmanager = new NetworkManager(EnumProtocolDirection.SERVERBOUND);
// PandaSpigot start - prevent blocking on adding a new network manager while the server is ticking

// PandaSpigot start
Loading