Skip to content

Commit

Permalink
Fix unload queue storing chunks in wrong sections
Browse files Browse the repository at this point in the history
The unload queue stored the chunks in the same section as
the chunk coordinate, when it needed to apply the unload shift.

Additionally, change the default region shift to the ticket
propagator shift as there is no benefit to using a low region
shift since no regionizing is occuring. This makes the unload
queue shift 6, which should reduce the number of sections to deal
with while processing unloads.
  • Loading branch information
Spottedleaf committed Jun 21, 2024
1 parent 9cd0201 commit 19105a9
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions patches/server/0991-Chunk-System-Starlight-from-Moonrise.patch
Original file line number Diff line number Diff line change
Expand Up @@ -8558,10 +8558,10 @@ index 0000000000000000000000000000000000000000..82e8ce73b77accd6a4210f88c9fccb32
+}
diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/queue/ChunkUnloadQueue.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/queue/ChunkUnloadQueue.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc07e710a5854fd526e3bb56d1565602ec728ce1
index 0000000000000000000000000000000000000000..7eafc5b7cba23d8dec92ecc1050afe3fd8c9e309
--- /dev/null
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/queue/ChunkUnloadQueue.java
@@ -0,0 +1,140 @@
@@ -0,0 +1,144 @@
+package ca.spottedleaf.moonrise.patches.chunk_system.queue;
+
+import ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable;
Expand Down Expand Up @@ -8627,12 +8627,13 @@ index 0000000000000000000000000000000000000000..bc07e710a5854fd526e3bb56d1565602
+ final int shift = this.coordinateShift;
+ final int sectionX = chunkX >> shift;
+ final int sectionZ = chunkZ >> shift;
+ final long sectionKey = CoordinateUtils.getChunkKey(sectionX, sectionZ);
+ final long chunkKey = CoordinateUtils.getChunkKey(chunkX, chunkZ);
+
+ UnloadSection section = this.unloadSections.get(chunkKey);
+ UnloadSection section = this.unloadSections.get(sectionKey);
+ if (section == null) {
+ section = new UnloadSection(this.orderGenerator.getAndIncrement());
+ this.unloadSections.put(chunkKey, section);
+ this.unloadSections.put(sectionKey, section);
+ }
+
+ return section.chunks.add(chunkKey);
Expand All @@ -8644,9 +8645,10 @@ index 0000000000000000000000000000000000000000..bc07e710a5854fd526e3bb56d1565602
+ final int shift = this.coordinateShift;
+ final int sectionX = chunkX >> shift;
+ final int sectionZ = chunkZ >> shift;
+ final long sectionKey = CoordinateUtils.getChunkKey(sectionX, sectionZ);
+ final long chunkKey = CoordinateUtils.getChunkKey(chunkX, chunkZ);
+
+ final UnloadSection section = this.unloadSections.get(chunkKey);
+ final UnloadSection section = this.unloadSections.get(sectionKey);
+
+ if (section == null) {
+ return false;
Expand All @@ -8657,7 +8659,7 @@ index 0000000000000000000000000000000000000000..bc07e710a5854fd526e3bb56d1565602
+ }
+
+ if (section.chunks.isEmpty()) {
+ this.unloadSections.remove(chunkKey);
+ this.unloadSections.remove(sectionKey);
+ }
+
+ return true;
Expand All @@ -8678,14 +8680,16 @@ index 0000000000000000000000000000000000000000..bc07e710a5854fd526e3bb56d1565602
+ sectionJson.add("coordinates", coordinates);
+
+ final UnloadSection actualSection = this.getSectionUnsynchronized(section.sectionX(), section.sectionZ());
+ for (final LongIterator iterator = actualSection.chunks.clone().iterator(); iterator.hasNext();) {
+ final long coordinate = iterator.nextLong();
+ if (actualSection != null) {
+ for (final LongIterator iterator = actualSection.chunks.clone().iterator(); iterator.hasNext(); ) {
+ final long coordinate = iterator.nextLong();
+
+ final JsonObject coordinateJson = new JsonObject();
+ coordinates.add(coordinateJson);
+ final JsonObject coordinateJson = new JsonObject();
+ coordinates.add(coordinateJson);
+
+ coordinateJson.addProperty("chunkX", Integer.valueOf(CoordinateUtils.getChunkX(coordinate)));
+ coordinateJson.addProperty("chunkZ", Integer.valueOf(CoordinateUtils.getChunkZ(coordinate)));
+ coordinateJson.addProperty("chunkX", Integer.valueOf(CoordinateUtils.getChunkX(coordinate)));
+ coordinateJson.addProperty("chunkZ", Integer.valueOf(CoordinateUtils.getChunkZ(coordinate)));
+ }
+ }
+ }
+
Expand Down Expand Up @@ -22849,7 +22853,7 @@ index 2a5453707bc172d8d0efe3f11959cb0b5f830984..b8499c1cea97a1a88a53053bc7da132f

diff --git a/src/main/java/io/papermc/paper/threadedregions/TickRegions.java b/src/main/java/io/papermc/paper/threadedregions/TickRegions.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d04285165241baec1005cb3ae81a623bcd3945a
index 0000000000000000000000000000000000000000..8424cf9d4617b4732d44cc460d25b04481068989
--- /dev/null
+++ b/src/main/java/io/papermc/paper/threadedregions/TickRegions.java
@@ -0,0 +1,10 @@
Expand All @@ -22859,7 +22863,7 @@ index 0000000000000000000000000000000000000000..9d04285165241baec1005cb3ae81a623
+public class TickRegions {
+
+ public static int getRegionChunkShift() {
+ return 2;
+ return ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ThreadedTicketLevelPropagator.SECTION_SHIFT;
+ }
+
+}
Expand Down

0 comments on commit 19105a9

Please sign in to comment.