Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 19:10:09 +01:00
03a4e7ac75
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 37262de8 PR-812: Add Registry#match(String) d6b40162 SPIGOT-4569: Add more BlockData API f9691891 PR-809: Throw a more clear error for BlockIterators with zero direction, add Vector#isZero() 91e79e19 PR-804: Added methods to get translation keys for materials, itemstacks and more 426b00d3 PR-795: Add new BiomeParameterPoint passed to BiomeProvider#getBiome 0e91ea52 SPIGOT-7224: Add events for brewing stands and campfires starting their actions CraftBukkit Changes: a50301aa5 Fix issues with fluid tag conversion and fluid #isTagged 6aeb5e4c3 SPIGOT-4569: Implement more BlockData API 7dbf862c2 PR-1131: Added methods to get translation keys for materials, itemstacks and more 7167588b1 PR-1117: Add new BiomeParameterPoint passed to BiomeProvider#getBiome 7c44152eb SPIGOT-7224: Add events for brewing stands and campfires starting their actions
56 Zeilen
3.2 KiB
Diff
56 Zeilen
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Sun, 18 Sep 2022 06:33:17 +0100
|
|
Subject: [PATCH] Configurable chat thread limit
|
|
|
|
By default, spigot shifts chat over to an unbounded thread pool,
|
|
on a normal server, this really offers no gains, the creation of a thread
|
|
on submitting to the pool on these servers eats more time vs just running it in
|
|
the netty pipeline, however, on servers using plugins which do work in here, there
|
|
could be some overall benefits to moving this stuff outside of the pipeline.
|
|
|
|
In general, this patch does two things:
|
|
1) Exposes the core size for the pool, this allows for ensuring that a number of threads
|
|
sit around in the pool, mitigating the need for creating new threads; This IS however
|
|
caveated, the ThreadPoolExecutor will ONLY create core threads as they're needed, it
|
|
just won't allow for us to dip back under the # of core threads, this can potentially
|
|
be mitigated by calling prestartCoreThread, however, I'm not sure if there is much justification
|
|
for this
|
|
2) Exposes a max size for the pool, as stated, by default this is unbounded, for most
|
|
servers limiting the size of the pool is going to have 0 effects given how fast chat
|
|
is actually processed, this is honestly really just exposed for the misnomers or people
|
|
who just wanna ensure that this won't grow over a specific size if chat gets stupidly active
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
index 52b02cb1f02d1c65b840f38cfc8baee500aa2259..8d442c5a498ecf288a0cc0c54889c6e2fda849ce 100644
|
|
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
@@ -254,13 +254,26 @@ public class GlobalConfiguration extends ConfigurationPart {
|
|
public Misc misc;
|
|
|
|
public class Misc extends ConfigurationPart {
|
|
+
|
|
+ public ChatThreads chatThreads;
|
|
public class ChatThreads extends ConfigurationPart.Post {
|
|
private int chatExecutorCoreSize = -1;
|
|
private int chatExecutorMaxSize = -1;
|
|
|
|
@Override
|
|
public void postProcess() {
|
|
- // TODO: FILL
|
|
+ //noinspection ConstantConditions
|
|
+ if (net.minecraft.server.MinecraftServer.getServer() == null) return; // In testing env, this will be null here
|
|
+ int _chatExecutorMaxSize = (chatExecutorMaxSize <= 0) ? Integer.MAX_VALUE : chatExecutorMaxSize; // This is somewhat dumb, but, this is the default, do we cap this?;
|
|
+ int _chatExecutorCoreSize = Math.max(chatExecutorCoreSize, 0);
|
|
+
|
|
+ if (_chatExecutorMaxSize < _chatExecutorCoreSize) {
|
|
+ _chatExecutorMaxSize = _chatExecutorCoreSize;
|
|
+ }
|
|
+
|
|
+ java.util.concurrent.ThreadPoolExecutor executor = (java.util.concurrent.ThreadPoolExecutor) net.minecraft.server.MinecraftServer.getServer().chatExecutor;
|
|
+ executor.setCorePoolSize(_chatExecutorCoreSize);
|
|
+ executor.setMaximumPoolSize(_chatExecutorMaxSize);
|
|
}
|
|
}
|
|
public int maxJoinsPerTick = 5;
|