aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch')
-rw-r--r--Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch b/Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch
new file mode 100644
index 0000000000..684f7b50a5
--- /dev/null
+++ b/Spigot-Server-Patches/0165-Prevent-Auto-Save-if-Save-Queue-is-full.patch
@@ -0,0 +1,68 @@
+From e58b0d4d3e4c3ead75b9d947c623d2a4c3f5a2c8 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Thu, 3 Nov 2016 21:52:22 -0400
+Subject: [PATCH] Prevent Auto Save if Save Queue is full
+
+If the save queue already has 50 (configurable) of chunks pending,
+then avoid processing auto save (which would add more)
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+index 220ecaf8d..4ca44afa9 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+@@ -376,6 +376,11 @@ public class PaperWorldConfig {
+ maxAutoSaveChunksPerTick = getInt("max-auto-save-chunks-per-tick", 24);
+ }
+
++ public int queueSizeAutoSaveThreshold = 50;
++ private void queueSizeAutoSaveThreshold() {
++ queueSizeAutoSaveThreshold = getInt("save-queue-limit-for-auto-save", 50);
++ }
++
+ public boolean removeCorruptTEs = false;
+ private void removeCorruptTEs() {
+ removeCorruptTEs = getBoolean("remove-corrupt-tile-entities", false);
+diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+index 71df9e4aa..0fb1f8427 100644
+--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
+@@ -254,6 +254,14 @@ public class ChunkProviderServer implements IChunkProvider {
+ int i = 0;
+
+ // CraftBukkit start
++ // Paper start
++ final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProviderServer().chunkLoader;
++ final int queueSize = chunkLoader.getQueueSize();
++ if (queueSize > world.paperConfig.queueSizeAutoSaveThreshold){
++ return false;
++ }
++ final int autoSaveLimit = world.paperConfig.maxAutoSaveChunksPerTick;
++ // Paper end
+ Iterator iterator = this.chunks.values().iterator();
+ while (iterator.hasNext()) {
+ Chunk chunk = (Chunk) iterator.next();
+@@ -267,7 +275,7 @@ public class ChunkProviderServer implements IChunkProvider {
+ this.saveChunk(chunk);
+ chunk.f(false);
+ ++i;
+- if (!flag && i >= world.paperConfig.maxAutoSaveChunksPerTick) { // Spigot - // Paper - Incremental Auto Save - cap max per tick
++ if (!flag && i >= autoSaveLimit) { // Spigot - // Paper - Incremental Auto Save - cap max per tick
+ return false;
+ }
+ }
+diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+index 90d069539..895882b2e 100644
+--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
++++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
+@@ -32,6 +32,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
+ this.e = dataconvertermanager;
+ }
+
++ public int getQueueSize() { return queue.size(); } // Paper
++
+ // CraftBukkit start - Add async variant, provide compatibility
+ @Nullable
+ public Chunk a(World world, int i, int j) throws IOException {
+--
+2.12.2
+