mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-02 17:32:03 +01:00
6d1a918378
This work is 100% unfinished. I am pushing it up so that we as a team can work on this update. Do not try to use this branch. You will fail.
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 2f6e169f5..ec4643384 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 loadPermsBeforePlugins() {
|
|
loadPermsBeforePlugins = getBoolean("settings.load-permissions-yml-before-plugins", true);
|
|
}
|
|
+
|
|
+ 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 384628ccc..b335016fd 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.IOException;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import javax.annotation.Nullable;
|
|
+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();
|
|
|
|
--
|