5b6dfb3463
This work is 100% unfinished. I am pushing it up so that we as a team can work on this update. Do not try to use this branch. You will fail.
47 Zeilen
2.5 KiB
Diff
47 Zeilen
2.5 KiB
Diff
From 5cdbcf814615e02e10b10126bcad50a7d29fa787 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 4 Mar 2013 23:46:10 -0500
|
|
Subject: [PATCH] Chunk Save Reattempt
|
|
|
|
We commonly have "Stream Closed" errors on chunk saving, so this code should re-try to save the chunk in the event of failure and hopefully prevent rollbacks.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
index 17996af9c..faaa1b36b 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -320,11 +320,16 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
NBTTagCompound nbttagcompound = SupplierUtils.getIfExists(chunk.compoundSupplier); // Spigot // Paper
|
|
|
|
if (nbttagcompound != null) {
|
|
+ int attempts = 0; Exception laste = null; while (attempts++ < 5) { // Paper
|
|
try {
|
|
this.b(chunkcoordintpair, nbttagcompound);
|
|
+ laste = null; break; // Paper
|
|
} catch (Exception exception) {
|
|
- ChunkRegionLoader.a.error("Failed to save chunk", exception);
|
|
+ //ChunkRegionLoader.a.error("Failed to save chunk", exception); // Paper
|
|
+ laste = exception; // Paper
|
|
}
|
|
+ try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();} } // Paper
|
|
+ if (laste != null) { com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(laste); MinecraftServer.LOGGER.error("Failed to save chunk", laste); } // Paper
|
|
}
|
|
|
|
flag = true;
|
|
diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java
|
|
index c80d724f0..3f9aa5923 100644
|
|
--- a/src/main/java/net/minecraft/server/RegionFile.java
|
|
+++ b/src/main/java/net/minecraft/server/RegionFile.java
|
|
@@ -210,8 +210,7 @@ public class RegionFile {
|
|
|
|
this.b(i, j, (int) (SystemUtils.d() / 1000L));
|
|
} catch (IOException ioexception) {
|
|
- ioexception.printStackTrace();
|
|
- ServerInternalException.reportInternalException(ioexception); // Paper
|
|
+ org.spigotmc.SneakyThrow.sneaky(ioexception); // Paper - we want the upper try/catch to retry this
|
|
}
|
|
|
|
}
|
|
--
|
|
2.18.0
|
|
|