mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
fddfa624cf
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.8 KiB
Diff
55 lines
2.8 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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
|
|
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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
|
|
@@ -0,0 +0,0 @@ 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);
|
|
@@ -0,0 +0,0 @@ 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 {
|