mirror of
https://github.com/PaperMC/Paper.git
synced 2024-08-21 20:02:55 +02:00
Upstream has released updates that appears to apply and compile correctly. This update has only been PARTIALLY tested by PaperMC and as with ANY update, please do your own testing I've tested basic region file saving as well as our oversized chunks approach. Bukkit Changes: e167e549 Clarify MerchantInventory#getSelectedRecipe. 3a1d5b8f Apply default permissions by registration order. c64cc93f Make tags Keyed ec037ed7 Added a method to get a list of tags bfb6ef86 Introduce rotation methods to the Vector class fc727372 Remove draft API from FluidLevelChangeEvent CraftBukkit Changes:6430d9c0
SPIGOT-4632: BlockState location is not fixed14cd1688
Fix CraftInventoryMerchant#getSelectedRecipe if there is no active merchant recipe.c24abab7
Load custom permissions after default permissions.bc99dfe8
Make tags Keyed6fce004f
Added a method to get a list of tags Spigot Changes: e5e5c7c6 Allow Saving Large Chunks e8d3881c Rebuild patches
59 lines
2.6 KiB
Diff
59 lines
2.6 KiB
Diff
From 3e2785e893872375e49c0565c801df502bc1a616 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/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java
|
|
index 0f1c74dd33..9626396745 100644
|
|
--- a/src/main/java/net/minecraft/server/RegionFile.java
|
|
+++ b/src/main/java/net/minecraft/server/RegionFile.java
|
|
@@ -276,8 +276,7 @@ public class RegionFile {
|
|
|
|
this.b(i, j, (int) (SystemUtils.getTimeMillis() / 1000L));
|
|
} catch (IOException ioexception) {
|
|
- ioexception.printStackTrace();
|
|
- ServerInternalException.reportInternalException(ioexception); // Paper
|
|
+ com.destroystokyo.paper.util.SneakyThrow.sneaky(ioexception); // Paper - we want the upper try/catch to retry this
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
index e507a996f1..5dbd1d517a 100644
|
|
--- a/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
+++ b/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
@@ -95,11 +95,29 @@ public class RegionFileCache {
|
|
|
|
@Nullable
|
|
public static synchronized void write(File file, int i, int j, NBTTagCompound nbttagcompound) throws IOException {
|
|
+ int attempts = 0; Exception laste = null; while (attempts++ < 5) { try { // Paper
|
|
RegionFile regionfile = a(file, i, j);
|
|
|
|
DataOutputStream dataoutputstream = regionfile.c(i & 31, j & 31);
|
|
NBTCompressedStreamTools.a(nbttagcompound, (java.io.DataOutput) dataoutputstream);
|
|
dataoutputstream.close();
|
|
+ // Paper start
|
|
+ laste = null; break; // Paper
|
|
+ } catch (Exception exception) {
|
|
+ //ChunkRegionLoader.a.error("Failed to save chunk", exception); // Paper
|
|
+ laste = exception; // Paper
|
|
+ }
|
|
+ try {
|
|
+ Thread.sleep(10);
|
|
+ } catch (InterruptedException e) {
|
|
+ e.printStackTrace();
|
|
+ }
|
|
+ }
|
|
+ if (laste != null) {
|
|
+ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(laste);
|
|
+ MinecraftServer.LOGGER.error("Failed to save chunk", laste);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
public static synchronized boolean chunkExists(File file, int i, int j) {
|
|
--
|
|
2.20.1
|
|
|