mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
730882fca9
Chunk system patch was refactored to take advantage of newer ConcurrentUtil's concurrent long hash table (which fixes hash collisions caused by chaining fastutil's long hash and CHM's hash) plus some other minor improvements. The chunk system was also merged with Starlight, which mostly provides a small improvement to ThreadedLevelLightEngine#checkBlock as the scheduling was rewritten.
55 lines
2.9 KiB
Diff
55 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 b24e8255ab18eb5b2e4968aa62aa3d72ef33f0eb..12b7d50f49a2184aaf220a4a50a137b217c57124 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
|
|
@@ -296,7 +296,7 @@ public class RegionFile implements AutoCloseable {
|
|
return true;
|
|
}
|
|
} catch (IOException ioexception) {
|
|
- com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(ioexception); // Paper - ServerExceptionEvent
|
|
+ com.destroystokyo.paper.util.SneakyThrow.sneaky(ioexception); // Paper - Chunk save reattempt; we want the upper try/catch to retry this
|
|
return false;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
index 40f2f4d052add3b4270d29c843e49fb621e1bc8d..df099d4c7f101f50d40dae99b45c271b02712434 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
|
|
@@ -134,6 +134,11 @@ public final class RegionFileStorage implements AutoCloseable {
|
|
|
|
protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException {
|
|
RegionFile regionfile = this.getRegionFile(pos, false); // CraftBukkit
|
|
+ // Paper start - Chunk save reattempt
|
|
+ int attempts = 0;
|
|
+ Exception lastException = null;
|
|
+ while (attempts++ < 5) { try {
|
|
+ // Paper end - Chunk save reattempt
|
|
|
|
if (nbt == null) {
|
|
regionfile.clear(pos);
|
|
@@ -158,7 +163,18 @@ public final class RegionFileStorage implements AutoCloseable {
|
|
dataoutputstream.close();
|
|
}
|
|
}
|
|
+ // Paper start - Chunk save reattempt
|
|
+ return;
|
|
+ } catch (Exception ex) {
|
|
+ lastException = ex;
|
|
+ }
|
|
+ }
|
|
|
|
+ if (lastException != null) {
|
|
+ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(lastException);
|
|
+ net.minecraft.server.MinecraftServer.LOGGER.error("Failed to save chunk {}", pos, lastException);
|
|
+ }
|
|
+ // Paper end - Chunk save reattempt
|
|
}
|
|
|
|
public void close() throws IOException {
|