66 lines
3.8 KiB
Diff
66 lines
3.8 KiB
Diff
From 264f8e1152df767154c82b0723c0b4f4421e2157 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 19 Sep 2016 23:16:39 -0400
|
|
Subject: [PATCH] Incremental Auto Saving
|
|
|
|
Process auto save every tick instead of once per auto tick interval, so that chunk saves will distribute over many ticks instead of all at once.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 683a6dd..4a51eff 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -960,7 +960,7 @@ public class Chunk {
|
|
if (this.t && this.world.getTime() != this.lastSaved || this.s) {
|
|
return true;
|
|
}
|
|
- } else if (this.t && this.world.getTime() >= this.lastSaved + MinecraftServer.getServer().autosavePeriod * 4) { // Spigot - Only save if we've passed 2 auto save intervals without modification
|
|
+ } else if (this.t && this.world.getTime() >= this.lastSaved + MinecraftServer.getServer().autosavePeriod) { // Spigot // Paper - Remove broken change
|
|
return true;
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index 1ba02f1..0410bf2 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -265,7 +265,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
this.saveChunk(chunk);
|
|
chunk.f(false);
|
|
++i;
|
|
- if (i == 24 && !flag && false) { // Spigot
|
|
+ if (i == 24 && !flag) { // Spigot - // Paper - Incremental Auto Save - cap to 24 per tick
|
|
return false;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 8ca8fbf..8deb679 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -745,10 +745,10 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
|
this.q.b().a(agameprofile);
|
|
}
|
|
|
|
- if (autosavePeriod > 0 && this.ticks % autosavePeriod == 0) { // CraftBukkit
|
|
+ if (autosavePeriod > 0 /*&& this.ticks % autosavePeriod == 0*/) { // CraftBukkit // Paper - Incremental Auto Saving
|
|
MinecraftTimings.worldSaveTimer.startTiming(); // Spigot
|
|
this.methodProfiler.a("save");
|
|
- this.v.savePlayers();
|
|
+ if (this.ticks % autosavePeriod == 0) this.v.savePlayers(); // Paper - Incremental Auto Saving
|
|
// Spigot Start
|
|
// We replace this with saving each individual world as this.saveChunks(...) is broken,
|
|
// and causes the main thread to sleep for random amounts of time depending on chunk activity
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index 5ed6d3e..a47bfee 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -1024,7 +1024,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
|
ChunkProviderServer chunkproviderserver = this.getChunkProviderServer();
|
|
|
|
if (chunkproviderserver.e()) {
|
|
- org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit
|
|
+ if (flag) org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit // Paper - Incremental Auto Saving - Only fire event on full save
|
|
if (iprogressupdate != null) {
|
|
iprogressupdate.a("Saving level");
|
|
}
|
|
--
|
|
2.9.3
|
|
|