Skip to content

Commit 258a73b

Browse files
committed
fix: disk cache on paper 26.1
1 parent 01930b5 commit 258a73b

5 files changed

Lines changed: 38 additions & 18 deletions

File tree

orebfuscator-core/src/main/java/dev/imprex/orebfuscator/OrebfuscatorDumpFile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private void initialize() {
7676
orebfuscator.config().dumpBlocks(createSection("blocks"));
7777

7878
Base64.Encoder encoder = Base64.getUrlEncoder();
79-
String latestLog = OfcLogger.getLatestVerboseLog();
79+
String latestLog = OfcLogger.getLatestLog();
8080
set("verboseLog", encoder.encodeToString(latestLog.getBytes(StandardCharsets.UTF_8)));
8181

8282
try {

orebfuscator-core/src/main/java/dev/imprex/orebfuscator/logging/OfcLogger.java

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package dev.imprex.orebfuscator.logging;
22

3+
import dev.imprex.orebfuscator.util.QuickMaths;
4+
import java.util.Map;
35
import java.util.Objects;
46
import java.util.Queue;
7+
import java.util.concurrent.ConcurrentHashMap;
58
import java.util.concurrent.ConcurrentLinkedQueue;
9+
import java.util.concurrent.atomic.AtomicLong;
610
import org.jspecify.annotations.NullMarked;
711
import org.jspecify.annotations.Nullable;
812

913
@NullMarked
1014
public class OfcLogger {
1115

1216
private static LoggerAccessor logger = new SystemLogger();
13-
14-
private static final Queue<String> VERBOSE_LOG = new ConcurrentLinkedQueue<>();
1517
private static boolean verbose;
1618

19+
private static final Queue<String> MESSAGE_LOG = new ConcurrentLinkedQueue<>();
20+
private static final Map<String, AtomicLong> COUNTERS = new ConcurrentHashMap<>();
21+
1722
public static void setLogger(LoggerAccessor logger) {
1823
if (OfcLogger.logger instanceof SystemLogger) {
1924
OfcLogger.logger = Objects.requireNonNull(logger);
@@ -29,8 +34,8 @@ public static void setVerboseLogging(boolean enabled) {
2934
}
3035
}
3136

32-
public static String getLatestVerboseLog() {
33-
return String.join("\n", VERBOSE_LOG);
37+
public static String getLatestLog() {
38+
return String.join("\n", MESSAGE_LOG);
3439
}
3540

3641
public static void debug(String message) {
@@ -53,6 +58,15 @@ public static void error(String message, @Nullable Throwable throwable) {
5358
log(LogLevel.ERROR, message, throwable);
5459
}
5560

61+
public static void throttle(LogLevel level, String message) {
62+
var count = COUNTERS.computeIfAbsent(message, k -> new AtomicLong()).incrementAndGet();
63+
if (count < 16) {
64+
log(level, message);
65+
} else if (QuickMaths.isPowerOfTwo(count)) {
66+
log(level, "[x%d] %s".formatted(count, message));
67+
}
68+
}
69+
5670
public static void log(LogLevel level, String message) {
5771
log(level, message, null);
5872
}
@@ -61,18 +75,14 @@ public static void log(LogLevel level, String message, @Nullable Throwable throw
6175
Objects.requireNonNull(level);
6276
Objects.requireNonNull(message);
6377

64-
if (level == LogLevel.DEBUG) {
65-
// always store debug messages for system dumps
66-
while (VERBOSE_LOG.size() >= 1000) {
67-
VERBOSE_LOG.poll();
68-
}
69-
70-
VERBOSE_LOG.offer(message);
78+
while (MESSAGE_LOG.size() >= 2048) {
79+
MESSAGE_LOG.poll();
80+
}
81+
MESSAGE_LOG.offer(message);
7182

72-
// filter out debug if verbose logging is disabled
73-
if (!verbose) {
74-
return;
75-
}
83+
// filter out debug if verbose logging is disabled
84+
if (level == LogLevel.DEBUG && !verbose) {
85+
return;
7686
}
7787

7888
logger.log(level, message, throwable);

orebfuscator-core/src/main/java/dev/imprex/orebfuscator/util/QuickMaths.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
public class QuickMaths {
44

5+
public static boolean isPowerOfTwo(long n) {
6+
return (n & (n - 1)) == 0;
7+
}
8+
59
public static int ceilToPowerOfTwo(int value) {
610
value--;
711
value |= value >> 1;

orebfuscator-nms/orebfuscator-nms-v26_1/src/main/java/net/imprex/orebfuscator/nms/v26_1/RegionFileCache.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
import java.nio.file.Path;
1010
import net.minecraft.server.dedicated.DedicatedServer;
1111
import net.minecraft.world.level.ChunkPos;
12+
import net.minecraft.world.level.Level;
1213
import net.minecraft.world.level.chunk.storage.RegionFile;
1314
import net.minecraft.world.level.chunk.storage.RegionFileVersion;
15+
import net.minecraft.world.level.chunk.storage.RegionStorageInfo;
16+
import net.minecraft.world.level.levelgen.WorldDimensions;
1417
import org.bukkit.Bukkit;
1518
import org.jspecify.annotations.NullMarked;
1619
import org.jspecify.annotations.Nullable;
@@ -25,7 +28,8 @@ public class RegionFileCache extends AbstractRegionFileCache<RegionFile> {
2528
@Override
2629
protected RegionFile createRegionFile(Path path) throws IOException {
2730
boolean isSyncChunkWrites = serverHandle(Bukkit.getServer(), DedicatedServer.class).forceSynchronousWrites();
28-
return new RegionFile(null, path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
31+
RegionStorageInfo info = new RegionStorageInfo("orebfuscator", Level.OVERWORLD, "orebfuscator_cache");
32+
return new RegionFile(info, path, path.getParent(), RegionFileVersion.VERSION_NONE, isSyncChunkWrites);
2933
}
3034

3135
@Override

orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/obfuscation/ObfuscationAsyncListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
import com.comphenix.protocol.events.PacketAdapter;
88
import com.comphenix.protocol.events.PacketEvent;
99
import dev.imprex.orebfuscator.PermissionRequirements;
10+
import dev.imprex.orebfuscator.logging.LogLevel;
1011
import dev.imprex.orebfuscator.logging.OfcLogger;
1112
import dev.imprex.orebfuscator.obfuscation.ObfuscationPipeline;
1213
import dev.imprex.orebfuscator.statistics.InjectorStatistics;
1314
import java.util.List;
1415
import java.util.concurrent.CompletableFuture;
16+
import java.util.concurrent.atomic.AtomicInteger;
1517
import java.util.stream.Stream;
1618
import net.imprex.orebfuscator.Orebfuscator;
1719
import net.imprex.orebfuscator.iterop.BukkitChunkPacketAccessor;
@@ -100,7 +102,7 @@ public void onPacketSending(PacketEvent event) {
100102
if (packet.isEmpty()) {
101103
future = CompletableFuture.completedFuture(null);
102104
} else {
103-
OfcLogger.warn("Processing chunk packet async without an obfuscation future, that shouldn't happen!");
105+
OfcLogger.throttle(LogLevel.WARN, "Processing chunk packet async without an obfuscation future, that shouldn't happen!");
104106
future = pipeline.request(world, player, packet, null).toCompletableFuture();
105107
}
106108
}

0 commit comments

Comments
 (0)