From 700d3c580c1e8ffbe7e202a79d42a9dfb58073b3 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Fri, 31 Mar 2023 21:20:53 -0700 Subject: [PATCH] Always process specialCaseUnload during ticket level updates It is not guaranteed that ticket levels are updated, so we need to to move the logic so that it always runs whether or not tickets update. --- patches/server/0005-Threaded-Regions.patch | 40 ++++++++++--------- ...lism-for-neighbour-writing-chunk-sta.patch | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/patches/server/0005-Threaded-Regions.patch b/patches/server/0005-Threaded-Regions.patch index 2d8d724..a80c32f 100644 --- a/patches/server/0005-Threaded-Regions.patch +++ b/patches/server/0005-Threaded-Regions.patch @@ -2044,7 +2044,7 @@ index 61c170555c8854b102c640b0b6a615f9f732edbf..515cc130a411f218ed20628eb918be9d } diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java -index c6d20bc2f0eab737338db6b88dacb63f0decb66c..0d1896d09d419c78501bbccca97424dd1545230b 100644 +index c6d20bc2f0eab737338db6b88dacb63f0decb66c..9ac75b6c9d9698c6369978c4b004a82aa2b747f4 100644 --- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java +++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java @@ -3,7 +3,6 @@ package io.papermc.paper.chunk.system.scheduling; @@ -2826,25 +2826,27 @@ index c6d20bc2f0eab737338db6b88dacb63f0decb66c..0d1896d09d419c78501bbccca97424dd if (chunkHolder.isSafeToUnload() != null) { LOGGER.error("Chunkholder " + chunkHolder + " is not safe to unload but is inside the unload queue?"); continue; -@@ -1168,6 +1492,17 @@ public final class ChunkHolderManager { - } - +@@ -1170,6 +1494,19 @@ public final class ChunkHolderManager { this.ticketLevelUpdates.clear(); -+ -+ // Folia start - region threading -+ // it is possible that a special case new chunk holder had its ticket removed before it was propagated, -+ // which means checkUnload was never invoked. By checking unload here, we ensure that either the -+ // ticket level was propagated (in which case, a later depropagation would check again) or that -+ // we called checkUnload for it. -+ for (final NewChunkHolder special : this.specialCaseUnload) { -+ special.checkUnload(); -+ } -+ this.specialCaseUnload.clear(); -+ // Folia end - region threading } } ++ ++ // Folia start - region threading ++ // it is possible that a special case new chunk holder had its ticket removed before it was propagated, ++ // which means checkUnload was never invoked. By checking unload here, we ensure that either the ++ // ticket level was propagated (in which case, a later depropagation would check again) or that ++ // we called checkUnload for it. ++ if (!this.specialCaseUnload.isEmpty()) { ++ for (final NewChunkHolder special : this.specialCaseUnload) { ++ special.checkUnload(); ++ } ++ this.specialCaseUnload.clear(); ++ } ++ // Folia end - region threading } finally { -@@ -1193,7 +1528,12 @@ public final class ChunkHolderManager { + this.ticketLock.unlock(); + } +@@ -1193,7 +1530,12 @@ public final class ChunkHolderManager { // only call on tick thread protected final boolean processPendingFullUpdate() { @@ -2858,7 +2860,7 @@ index c6d20bc2f0eab737338db6b88dacb63f0decb66c..0d1896d09d419c78501bbccca97424dd boolean ret = false; -@@ -1204,9 +1544,7 @@ public final class ChunkHolderManager { +@@ -1204,9 +1546,7 @@ public final class ChunkHolderManager { ret |= holder.handleFullStatusChange(changedFullStatus); if (!changedFullStatus.isEmpty()) { @@ -2869,7 +2871,7 @@ index c6d20bc2f0eab737338db6b88dacb63f0decb66c..0d1896d09d419c78501bbccca97424dd changedFullStatus.clear(); } } -@@ -1256,7 +1594,7 @@ public final class ChunkHolderManager { +@@ -1256,7 +1596,7 @@ public final class ChunkHolderManager { private JsonObject getDebugJsonNoLock() { final JsonObject ret = new JsonObject(); @@ -2878,7 +2880,7 @@ index c6d20bc2f0eab737338db6b88dacb63f0decb66c..0d1896d09d419c78501bbccca97424dd final JsonArray unloadQueue = new JsonArray(); ret.add("unload_queue", unloadQueue); -@@ -1275,60 +1613,73 @@ public final class ChunkHolderManager { +@@ -1275,60 +1615,73 @@ public final class ChunkHolderManager { holders.add(holder.getDebugJson()); } diff --git a/patches/server/0006-Increase-parallelism-for-neighbour-writing-chunk-sta.patch b/patches/server/0006-Increase-parallelism-for-neighbour-writing-chunk-sta.patch index 1dcee9e..6073610 100644 --- a/patches/server/0006-Increase-parallelism-for-neighbour-writing-chunk-sta.patch +++ b/patches/server/0006-Increase-parallelism-for-neighbour-writing-chunk-sta.patch @@ -196,7 +196,7 @@ index 0b7a2b0ead4f3bc07bfd9a38c2b7cf024bd140c6..36e93fefdfbebddce4c153974c7cd81a final int chunkX = CoordinateUtils.getChunkX(coordinate); final int chunkZ = CoordinateUtils.getChunkZ(coordinate); diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java -index 0d1896d09d419c78501bbccca97424dd1545230b..c9080c4df6f416aa023c8bf87e07048ba0c41955 100644 +index 9ac75b6c9d9698c6369978c4b004a82aa2b747f4..aa6dad3a41077b187ef0702cb27ca03f6d9596fb 100644 --- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java +++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java @@ -1339,17 +1339,23 @@ public final class ChunkHolderManager {