mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-16 07:35:35 +01:00
c953e51dd7
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 221aed6cf SPIGOT-6413: Server Corruption Changing Blocks in Piston Events 721c4966b SPIGOT-6411: The PlayerEditBookEvent is not called when the player edits a book in the off-hand. be0e94581 Add mc-dev imports Spigot Changes: a25e8ed2 Remove mc-dev imports
60 lines
2.9 KiB
Diff
60 lines
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 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/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
|
index 1638f7902290e1bb233f11e5d0bbf83a9e863939..4bf3e0cb4602d33a2e00c502b1dd212032b22a8f 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
|
@@ -265,7 +265,7 @@ public class RegionFile implements AutoCloseable {
|
|
return true;
|
|
}
|
|
} catch (IOException ioexception) {
|
|
- com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(ioexception); // Paper
|
|
+ com.destroystokyo.paper.util.SneakyThrow.sneaky(ioexception); // Paper - we want the upper try/catch to retry this
|
|
return false;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
|
index de125077656f249d5cf9b76f07981b55e690e015..8310dd6bfc04b8ac0a51545baa3a264e6cb42eac 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
|
@@ -11,6 +11,7 @@ import java.io.IOException;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.nbt.NBTCompressedStreamTools;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
+import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.util.ExceptionSuppressor;
|
|
import net.minecraft.world.level.ChunkCoordIntPair;
|
|
|
|
@@ -92,6 +93,7 @@ public final class RegionFileCache implements AutoCloseable {
|
|
|
|
protected void write(ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound) throws IOException {
|
|
RegionFile regionfile = this.getFile(chunkcoordintpair, false); // CraftBukkit
|
|
+ int attempts = 0; Exception laste = null; while (attempts++ < 5) { try { // Paper
|
|
DataOutputStream dataoutputstream = regionfile.c(chunkcoordintpair);
|
|
Throwable throwable = null;
|
|
|
|
@@ -115,6 +117,18 @@ public final class RegionFileCache implements AutoCloseable {
|
|
|
|
}
|
|
|
|
+ // Paper start
|
|
+ return;
|
|
+ } catch (Exception ex) {
|
|
+ laste = ex;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (laste != null) {
|
|
+ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(laste);
|
|
+ MinecraftServer.LOGGER.error("Failed to save chunk", laste);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
public void close() throws IOException {
|