Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Upstream has released updates that appears 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: b850a822 SPIGOT-4526: Add conversion time API for Zombie & subclasses CraftBukkit Changes: 38cf676e SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GEN b446cb5d SPIGOT-4527: Fix sponges with waterlogged blocks 6ec8ea5c SPIGOT-4526: Add conversion time API for Zombie & subclasses c64fe508 Mappings Update a3c2ec03 Fix missing ServerListPingEvent call for legacy pings Spigot Changes: 1dc156ce Rebuild patches 140f654d Mappings Update
94 lines
4.7 KiB
Diff
94 lines
4.7 KiB
Diff
From 4e6ed39f4a404bdd8ed37ebb72c38d80ce475e6b Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 4 Nov 2016 02:12:10 -0400
|
|
Subject: [PATCH] Chunk Save Stats Debug Option
|
|
|
|
Adds a command line flag to enable stats on how chunk saves are processing.
|
|
|
|
Stats on current queue, how many was processed and how many were queued.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
index 9990cdbcd..b1c4eb4ae 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -30,6 +30,11 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
public final LongSet unloadQueue = new LongOpenHashSet();
|
|
public final ChunkGenerator<?> chunkGenerator;
|
|
public final IChunkLoader chunkLoader;
|
|
+ // Paper start - chunk save stats
|
|
+ private long lastQueuedSaves = 0L; // Paper
|
|
+ private long lastProcessedSaves = 0L; // Paper
|
|
+ private long lastSaveStatPrinted = System.currentTimeMillis();
|
|
+ // Paper end
|
|
public final Long2ObjectMap<Chunk> chunks = Long2ObjectMaps.synchronize(new ChunkMap(8192));
|
|
private Chunk lastChunk;
|
|
private final ChunkTaskScheduler chunkScheduler;
|
|
@@ -239,6 +244,29 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
// Paper start
|
|
final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProvider().chunkLoader;
|
|
final int queueSize = chunkLoader.getQueueSize();
|
|
+
|
|
+ final long now = System.currentTimeMillis();
|
|
+ final long timeSince = (now - lastSaveStatPrinted) / 1000;
|
|
+ final Integer printRateSecs = Integer.getInteger("printSaveStats");
|
|
+ if (printRateSecs != null && timeSince >= printRateSecs) {
|
|
+ final String timeStr = "/" + timeSince +"s";
|
|
+ final long queuedSaves = chunkLoader.getQueuedSaves();
|
|
+ long queuedDiff = queuedSaves - lastQueuedSaves;
|
|
+ lastQueuedSaves = queuedSaves;
|
|
+
|
|
+ final long processedSaves = chunkLoader.getProcessedSaves();
|
|
+ long processedDiff = processedSaves - lastProcessedSaves;
|
|
+ lastProcessedSaves = processedSaves;
|
|
+
|
|
+ lastSaveStatPrinted = now;
|
|
+ if (processedDiff > 0 || queueSize > 0 || queuedDiff > 0) {
|
|
+ System.out.println("[Chunk Save Stats] " + world.worldData.getName() +
|
|
+ " - Current: " + queueSize +
|
|
+ " - Queued: " + queuedDiff + timeStr +
|
|
+ " - Processed: " +processedDiff + timeStr
|
|
+ );
|
|
+ }
|
|
+ }
|
|
if (!flag && queueSize > world.paperConfig.queueSizeAutoSaveThreshold){
|
|
return false;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
index f17869d4d..8eecdbd33 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -152,7 +152,13 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
|
|
}
|
|
|
|
- public int getQueueSize() { return queue.size(); } // Paper
|
|
+ // Paper start
|
|
+ private long queuedSaves = 0;
|
|
+ private final java.util.concurrent.atomic.AtomicLong processedSaves = new java.util.concurrent.atomic.AtomicLong(0L);
|
|
+ public int getQueueSize() { return queue.size(); }
|
|
+ public long getQueuedSaves() { return queuedSaves; }
|
|
+ public long getProcessedSaves() { return processedSaves.longValue(); }
|
|
+ // Paper end
|
|
|
|
// CraftBukkit start - Add async variant, provide compatibility
|
|
@Nullable
|
|
@@ -344,6 +350,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
protected void a(ChunkCoordIntPair chunkcoordintpair, Supplier<NBTTagCompound> nbttagcompound) { // Spigot
|
|
this.saveMap.put(chunkcoordintpair.asLong(), nbttagcompound); // Paper
|
|
queue.add(new QueuedChunk(chunkcoordintpair, nbttagcompound)); // Paper - Chunk queue improvements
|
|
+ queuedSaves++; // Paper
|
|
FileIOThread.a().a(this);
|
|
}
|
|
|
|
@@ -371,6 +378,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
// Paper end
|
|
ChunkCoordIntPair chunkcoordintpair = chunk.coords; // Paper - Chunk queue improvements
|
|
Supplier<NBTTagCompound> nbttagcompound = chunk.compoundSupplier; // Spigot // Paper
|
|
+ processedSaves.incrementAndGet(); // Paper
|
|
|
|
if (nbttagcompound == null) {
|
|
return true;
|
|
--
|
|
2.20.0
|
|
|