mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-04 02:01:44 +01:00
974b0afca9
CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
94 lines
4.5 KiB
Diff
94 lines
4.5 KiB
Diff
From ebb2c9fa657f2f5ed42df82a3b7ef1a5461027f4 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 0fb1f8427..dabe4137f 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
|
@@ -28,6 +28,11 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
public final it.unimi.dsi.fastutil.longs.LongSet unloadQueue = new it.unimi.dsi.fastutil.longs.LongArraySet(); // PAIL: private -> public // Paper
|
|
public final ChunkGenerator chunkGenerator;
|
|
private 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
|
|
// Paper start
|
|
protected Chunk lastChunkByPos = null;
|
|
public Long2ObjectOpenHashMap<Chunk> chunks = new Long2ObjectOpenHashMap<Chunk>(8192) {
|
|
@@ -257,6 +262,30 @@ public class ChunkProviderServer implements IChunkProvider {
|
|
// Paper start
|
|
final ChunkRegionLoader chunkLoader = (ChunkRegionLoader) world.getChunkProviderServer().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 (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 895882b2e..a4c0b0c96 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -32,7 +32,13 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
this.e = dataconvertermanager;
|
|
}
|
|
|
|
- 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
|
|
@@ -142,6 +148,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
synchronized (lock) { // Paper - Chunk queue improvements
|
|
this.b.put(chunkcoordintpair, nbttagcompound);
|
|
}
|
|
+ queuedSaves++; // Paper
|
|
queue.add(new QueuedChunk(chunkcoordintpair, nbttagcompound)); // Paper - Chunk queue improvements
|
|
|
|
FileIOThread.a().a(this);
|
|
@@ -159,6 +166,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
return false;
|
|
} else {
|
|
ChunkCoordIntPair chunkcoordintpair = chunk.coords; // Paper - Chunk queue improvements
|
|
+ processedSaves.incrementAndGet(); // Paper
|
|
|
|
boolean flag;
|
|
|
|
--
|
|
2.12.2.windows.2
|
|
|