mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
64b19558b6
CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
79 lines
No EOL
3.3 KiB
Diff
79 lines
No EOL
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Antony Riley <antony@cyberiantiger.org>
|
|
Date: Tue, 29 Mar 2016 08:22:55 +0300
|
|
Subject: [PATCH] Sanitise RegionFileCache and make configurable.
|
|
|
|
RegionFileCache prior to this patch would close every single open region
|
|
file upon reaching a size of 256.
|
|
This patch modifies that behaviour so it closes the the least recently
|
|
used RegionFile.
|
|
The implementation uses a LinkedHashMap as an LRU cache (modified from HashMap).
|
|
The maximum size of the RegionFileCache is also made configurable.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
index 6907d4680..c3ff47e00 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
|
@@ -0,0 +0,0 @@ public class PaperConfig {
|
|
private static void healthDeath() {
|
|
setHealthBeforeDeathEvent = getBoolean("settings.set-health-before-death-event", false);
|
|
}
|
|
+
|
|
+ public static int regionFileCacheSize = 256;
|
|
+ private static void regionFileCacheSize() {
|
|
+ regionFileCacheSize = getInt("settings.region-file-cache-size", 256);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
index 02b9bc8df..91b55074e 100644
|
|
--- a/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
+++ b/src/main/java/net/minecraft/server/RegionFileCache.java
|
|
@@ -0,0 +0,0 @@ import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
+import com.destroystokyo.paper.PaperConfig; // Paper
|
|
+import java.util.LinkedHashMap; // Paper
|
|
|
|
public class RegionFileCache {
|
|
|
|
- public static final Map<File, RegionFile> a = Maps.newHashMap(); // Spigot - private -> public
|
|
+ public static final Map<File, RegionFile> a = new LinkedHashMap(PaperConfig.regionFileCacheSize, 0.75f, true); // Spigot - private -> public, Paper - HashMap -> LinkedHashMap
|
|
|
|
public static synchronized RegionFile a(File file, int i, int j) {
|
|
File file1 = new File(file, "region");
|
|
@@ -0,0 +0,0 @@ public class RegionFileCache {
|
|
file1.mkdirs();
|
|
}
|
|
|
|
- if (RegionFileCache.a.size() >= 256) {
|
|
- a();
|
|
+ if (RegionFileCache.a.size() >= PaperConfig.regionFileCacheSize) { // Paper
|
|
+ trimCache(); // Paper
|
|
}
|
|
|
|
RegionFile regionfile1 = new RegionFile(file2);
|
|
@@ -0,0 +0,0 @@ public class RegionFileCache {
|
|
}
|
|
}
|
|
|
|
+ // Paper Start
|
|
+ private static synchronized void trimCache() {
|
|
+ Iterator<Map.Entry<File, RegionFile>> itr = RegionFileCache.a.entrySet().iterator();
|
|
+ int count = RegionFileCache.a.size() - PaperConfig.regionFileCacheSize;
|
|
+ while (count-- >= 0 && itr.hasNext()) {
|
|
+ try {
|
|
+ itr.next().getValue().c();
|
|
+ } catch (IOException ioexception) {
|
|
+ ioexception.printStackTrace();
|
|
+ ServerInternalException.reportInternalException(ioexception);
|
|
+ }
|
|
+ itr.remove();
|
|
+ }
|
|
+ }
|
|
+ // Paper End
|
|
+
|
|
public static synchronized void a() {
|
|
Iterator iterator = RegionFileCache.a.values().iterator();
|
|
|
|
--
|