From 5711126b988daac94bbe7cff806ddd8fa4836ee3 Mon Sep 17 00:00:00 2001 From: Christopher Bohn Date: Thu, 4 May 2023 22:41:32 -0700 Subject: [PATCH 1/3] add expiry and cache debug --- .../java/com/earth2me/essentials/ISettings.java | 2 ++ .../java/com/earth2me/essentials/Settings.java | 8 +++++++- .../essentials/userstorage/ModernUserMap.java | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 4da7f52549b..823734ebcf9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -282,6 +282,8 @@ public interface ISettings extends IConf { int getMaxUserCacheCount(); + long getMaxUserCacheValueExpiry(); + boolean allowSilentJoinQuit(); boolean isCustomJoinMessage(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index c0b1c618245..43d2109d75c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -1469,10 +1469,16 @@ public boolean isDropItemsIfFull() { // #easteregg @Override public int getMaxUserCacheCount() { - final long count = Runtime.getRuntime().maxMemory() / 1024 / 96; + final long count = Runtime.getRuntime().maxMemory() / 1024 / 1024; return config.getInt("max-user-cache-count", (int) count); } + // #easteregg + @Override + public long getMaxUserCacheValueExpiry() { + return config.getLong("max-user-cache-value-expiry", 600); + } + @Override public boolean isLastMessageReplyRecipient() { return config.getBoolean("last-message-reply-recipient", false); diff --git a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java index eaab42c0f87..9fc7e4d7105 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java @@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; @@ -26,6 +27,7 @@ public class ModernUserMap extends CacheLoader implements IUserMap { private final boolean debugPrintStackWithWarn; private final long debugMaxWarnsPerType; + private final boolean debugLogCache; private final ConcurrentMap debugNonPlayerWarnCounts; public ModernUserMap(final IEssentials ess) { @@ -33,6 +35,7 @@ public ModernUserMap(final IEssentials ess) { this.uuidCache = new ModernUUIDCache(ess); this.userCache = CacheBuilder.newBuilder() .maximumSize(ess.getSettings().getMaxUserCacheCount()) + .expireAfterAccess(ess.getSettings().getMaxUserCacheValueExpiry(), TimeUnit.SECONDS) .softValues() .build(this); @@ -40,9 +43,12 @@ public ModernUserMap(final IEssentials ess) { final String printStackProperty = System.getProperty("net.essentialsx.usermap.print-stack", "false"); // -Dnet.essentialsx.usermap.max-warns=20 final String maxWarnProperty = System.getProperty("net.essentialsx.usermap.max-warns", "100"); + // -Dnet.essentialsx.usermap.log-cache=true + final String logCacheProperty = System.getProperty("net.essentialsx.usermap.log-cache", "false"); this.debugMaxWarnsPerType = NumberUtil.isLong(maxWarnProperty) ? Long.parseLong(maxWarnProperty) : -1; this.debugPrintStackWithWarn = Boolean.parseBoolean(printStackProperty); + this.debugLogCache = Boolean.parseBoolean(logCacheProperty); this.debugNonPlayerWarnCounts = new ConcurrentHashMap<>(); } @@ -81,6 +87,7 @@ public User getUser(final UUID uuid) { public User getUser(final Player base) { final User user = loadUncachedUser(base); userCache.put(user.getUUID(), user); + debugLogCache(user.getName(), user.getUUID()); return user; } @@ -168,6 +175,7 @@ public User loadUncachedUser(final UUID uuid) { public void addCachedUser(final User user) { userCache.put(user.getUUID(), user); + debugLogCache(user.getName(), user.getUUID()); } @Override @@ -196,6 +204,14 @@ public void shutdown() { uuidCache.shutdown(); } + private void debugLogCache(final String name, final UUID uuid) { + if (!debugLogCache) { + return; + } + final Throwable throwable = new Throwable(); + ess.getLogger().log(Level.INFO, String.format("Caching user %s (%s)", name, uuid), throwable); + } + private void debugLogUncachedNonPlayer(final Player base) { final String typeName = base.getClass().getName(); final long count = debugNonPlayerWarnCounts.computeIfAbsent(typeName, name -> new AtomicLong(0)).getAndIncrement(); From 5705b9013f4d5f37502fb6e6a147df216a9ef9d3 Mon Sep 17 00:00:00 2001 From: Christopher Bohn Date: Fri, 5 May 2023 15:23:06 -0700 Subject: [PATCH 2/3] boop --- .../com/earth2me/essentials/userstorage/ModernUserMap.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java index 9fc7e4d7105..7c26f576328 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java @@ -87,7 +87,6 @@ public User getUser(final UUID uuid) { public User getUser(final Player base) { final User user = loadUncachedUser(base); userCache.put(user.getUUID(), user); - debugLogCache(user.getName(), user.getUUID()); return user; } @@ -121,6 +120,7 @@ public void addCachedNpcName(final UUID uuid, final String name) { public User load(final UUID uuid) throws Exception { final User user = loadUncachedUser(uuid); if (user != null) { + debugLogCache(user); return user; } @@ -175,7 +175,6 @@ public User loadUncachedUser(final UUID uuid) { public void addCachedUser(final User user) { userCache.put(user.getUUID(), user); - debugLogCache(user.getName(), user.getUUID()); } @Override @@ -204,12 +203,12 @@ public void shutdown() { uuidCache.shutdown(); } - private void debugLogCache(final String name, final UUID uuid) { + private void debugLogCache(final User user) { if (!debugLogCache) { return; } final Throwable throwable = new Throwable(); - ess.getLogger().log(Level.INFO, String.format("Caching user %s (%s)", name, uuid), throwable); + ess.getLogger().log(Level.INFO, String.format("Caching user %s (%s)", user.getName(), user.getUUID()), throwable); } private void debugLogUncachedNonPlayer(final Player base) { From 4c1eae074469496f4c242a6c7a122fdcb26b850e Mon Sep 17 00:00:00 2001 From: Christopher Bohn Date: Fri, 5 May 2023 15:33:08 -0700 Subject: [PATCH 3/3] beep --- .../java/com/earth2me/essentials/userstorage/ModernUserMap.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java index 7c26f576328..2fee7e6db02 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java @@ -87,6 +87,7 @@ public User getUser(final UUID uuid) { public User getUser(final Player base) { final User user = loadUncachedUser(base); userCache.put(user.getUUID(), user); + debugLogCache(user); return user; } @@ -175,6 +176,7 @@ public User loadUncachedUser(final UUID uuid) { public void addCachedUser(final User user) { userCache.put(user.getUUID(), user); + debugLogCache(user); } @Override