From 497b37aa3b493548a37b6bdb89c8a53800aabdef Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 15 Aug 2018 10:17:16 +0300 Subject: [PATCH] Removed DataContainerCache due to its memory impact vs cpu gain being too high --- .../plan/system/cache/CacheSystem.java | 16 ----- .../plan/system/cache/DataContainerCache.java | 67 ------------------- .../request/GenerateAnalysisPageRequest.java | 4 +- .../response/pages/RawPlayerDataResponse.java | 4 +- .../response/pages/RawServerDataResponse.java | 4 +- .../plan/utilities/html/pages/DebugPage.java | 35 ---------- .../utilities/html/pages/InspectPage.java | 3 +- 7 files changed, 7 insertions(+), 126 deletions(-) delete mode 100644 Plan/src/main/java/com/djrapitops/plan/system/cache/DataContainerCache.java diff --git a/Plan/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java index 7c8467631..7e1e160cd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java @@ -7,9 +7,6 @@ package com.djrapitops.plan.system.cache; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.system.PlanSystem; import com.djrapitops.plan.system.SubSystem; -import com.djrapitops.plugin.api.TimeAmount; -import com.djrapitops.plugin.task.AbsRunnable; -import com.djrapitops.plugin.task.RunnableFactory; import com.djrapitops.plugin.utilities.Verify; /** @@ -21,7 +18,6 @@ public class CacheSystem implements SubSystem { private final DataCache dataCache; private final GeolocationCache geolocationCache; - private final DataContainerCache dataContainerCache; public CacheSystem(PlanSystem system) { this(new DataCache(system), system); @@ -30,7 +26,6 @@ public class CacheSystem implements SubSystem { protected CacheSystem(DataCache dataCache, PlanSystem system) { this.dataCache = dataCache; geolocationCache = new GeolocationCache(() -> system.getLocaleSystem().getLocale()); - dataContainerCache = new DataContainerCache(); } public static CacheSystem getInstance() { @@ -43,19 +38,11 @@ public class CacheSystem implements SubSystem { public void enable() throws EnableException { dataCache.enable(); geolocationCache.enable(); - - RunnableFactory.createNew("DataContainer cache clean task", new AbsRunnable() { - @Override - public void run() { - dataContainerCache.clear(); - } - }).runTaskTimerAsynchronously(TimeAmount.MINUTE.ticks(), TimeAmount.MINUTE.ms()); } @Override public void disable() { geolocationCache.clearCache(); - dataContainerCache.clear(); } public DataCache getDataCache() { @@ -66,7 +53,4 @@ public class CacheSystem implements SubSystem { return geolocationCache; } - public DataContainerCache getDataContainerCache() { - return dataContainerCache; - } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/cache/DataContainerCache.java b/Plan/src/main/java/com/djrapitops/plan/system/cache/DataContainerCache.java deleted file mode 100644 index 07170130a..000000000 --- a/Plan/src/main/java/com/djrapitops/plan/system/cache/DataContainerCache.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.djrapitops.plan.system.cache; - -import com.djrapitops.plan.data.store.Key; -import com.djrapitops.plan.data.store.containers.AnalysisContainer; -import com.djrapitops.plan.data.store.containers.DataContainer; -import com.djrapitops.plan.data.store.containers.PlayerContainer; -import com.djrapitops.plan.system.database.databases.Database; -import com.djrapitops.plugin.api.TimeAmount; - -import java.util.UUID; -import java.util.function.Supplier; - -/** - * Cache to aid Bungee in case SQL is causing cpu thread starvation, leading to mysql connection drops. - * - * @author Rsl1122 - */ -public class DataContainerCache extends DataContainer { - - public DataContainerCache() { - super(TimeAmount.SECOND.ms() * 10L); - } - - public PlayerContainer getPlayerContainer(UUID uuid) { - return getAndCacheSupplier(Keys.playerContainer(uuid), Suppliers.playerContainer(uuid)); - } - - public AnalysisContainer getAnalysisContainer(UUID serverUUID) { - return getAndCacheSupplier(Keys.analysisContainer(serverUUID), Suppliers.analysisContainer(serverUUID)); - } - - private T getAndCacheSupplier(Key key, Supplier ifNotPresent) { - if (!supports(key)) { - putSupplier(key, ifNotPresent); - } - return getUnsafe(key); - } - - private static class Keys { - static Key analysisContainer(UUID serverUUID) { - return new Key<>(AnalysisContainer.class, "ANALYSIS_CONTAINER:" + serverUUID); - } - - static Key playerContainer(UUID uuid) { - return new Key<>(PlayerContainer.class, "PLAYER_CONTAINER:" + uuid); - } - - private Keys() { - // Static utility class - } - } - - private static class Suppliers { - static Supplier analysisContainer(UUID serverUUID) { - return () -> new AnalysisContainer(Database.getActive().fetch().getServerContainer(serverUUID)); - } - - static Supplier playerContainer(UUID uuid) { - return () -> Database.getActive().fetch().getPlayerContainer(uuid); - } - - private Suppliers() { - // Static utility class - } - } - -} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java index e421b5797..e5e47dae1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java @@ -9,7 +9,7 @@ import com.djrapitops.plan.api.exceptions.connection.InternalErrorException; import com.djrapitops.plan.api.exceptions.connection.WebException; import com.djrapitops.plan.api.exceptions.database.DBOpException; import com.djrapitops.plan.data.store.containers.AnalysisContainer; -import com.djrapitops.plan.system.cache.CacheSystem; +import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.webserver.response.DefaultResponses; @@ -79,7 +79,7 @@ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implem try { runningAnalysis = true; UUID serverUUID = ServerInfo.getServerUUID(); - AnalysisContainer analysisContainer = CacheSystem.getInstance().getDataContainerCache().getAnalysisContainer(serverUUID); + AnalysisContainer analysisContainer = new AnalysisContainer(Database.getActive().fetch().getServerContainer(serverUUID)); return new AnalysisPage(analysisContainer).toHtml(); } catch (DBOpException e) { if (!e.getCause().getMessage().contains("Connection is closed")) { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawPlayerDataResponse.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawPlayerDataResponse.java index 5e5970c71..6a9ee2391 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawPlayerDataResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawPlayerDataResponse.java @@ -1,6 +1,6 @@ package com.djrapitops.plan.system.webserver.response.pages; -import com.djrapitops.plan.system.cache.CacheSystem; +import com.djrapitops.plan.system.database.databases.Database; import java.util.UUID; @@ -12,6 +12,6 @@ import java.util.UUID; public class RawPlayerDataResponse extends RawDataResponse { public RawPlayerDataResponse(UUID uuid) { - super(CacheSystem.getInstance().getDataContainerCache().getPlayerContainer(uuid)); + super(Database.getActive().fetch().getPlayerContainer(uuid)); } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawServerDataResponse.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawServerDataResponse.java index 814198d15..acb61ba99 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawServerDataResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawServerDataResponse.java @@ -1,6 +1,6 @@ package com.djrapitops.plan.system.webserver.response.pages; -import com.djrapitops.plan.system.cache.CacheSystem; +import com.djrapitops.plan.system.database.databases.Database; import java.util.UUID; @@ -12,6 +12,6 @@ import java.util.UUID; public class RawServerDataResponse extends RawDataResponse { public RawServerDataResponse(UUID serverUUID) { - super(CacheSystem.getInstance().getDataContainerCache().getAnalysisContainer(serverUUID).getServerContainer()); + super(Database.getActive().fetch().getServerContainer(serverUUID)); } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java index 4da7cdffc..ad8af1497 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java @@ -2,13 +2,10 @@ package com.djrapitops.plan.utilities.html.pages; import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.data.container.Session; -import com.djrapitops.plan.data.store.CachingSupplier; -import com.djrapitops.plan.data.store.Key; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.mutators.formatting.Formatter; import com.djrapitops.plan.data.store.mutators.formatting.Formatters; import com.djrapitops.plan.data.store.objects.DateHolder; -import com.djrapitops.plan.system.cache.CacheSystem; import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.info.connection.ConnectionLog; @@ -32,7 +29,6 @@ import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.nio.charset.Charset; import java.util.*; -import java.util.function.Supplier; /** * Html parsing for the Debug page. @@ -68,7 +64,6 @@ public class DebugPage implements Page { StringBuilder content = new StringBuilder(); appendResponseCache(content); appendSessionCache(content); - appendDataContainerCache(content); return content.toString(); } @@ -110,36 +105,6 @@ public class DebugPage implements Page { } } - private void appendDataContainerCache(StringBuilder content) { - try { - content.append("
### DataContainer Cache:

"); - - content.append("Key | Is Cached | Cache Time
") - .append("-- | -- | --
"); - Formatter timeStamp = Formatters.yearLongValue(); - Set> dataContainers = CacheSystem.getInstance().getDataContainerCache().getMap().entrySet(); - if (dataContainers.isEmpty()) { - content.append("Empty"); - } - for (Map.Entry entry : dataContainers) { - String keyName = entry.getKey().getKeyName(); - Supplier supplier = entry.getValue(); - if (supplier instanceof CachingSupplier) { - CachingSupplier cachingSupplier = (CachingSupplier) supplier; - boolean isCached = cachingSupplier.isCached(); - String cacheText = isCached ? "Yes" : "No"; - String cacheTime = isCached ? timeStamp.apply(cachingSupplier.getCacheTime()) : "-"; - content.append(keyName).append(" | ").append(cacheText).append(" | ").append(cacheTime).append("
"); - } else { - content.append(keyName).append(" | ").append("Non-caching Supplier").append(" | ").append("-").append("
"); - } - } - content.append("
"); - } catch (Exception e) { - Log.toLog(this.getClass(), e); - } - } - private String createConfigContent() { StringBuilder content = new StringBuilder(); appendConfig(content); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java index 6312d31f4..506626182 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java @@ -14,7 +14,6 @@ import com.djrapitops.plan.data.store.mutators.formatting.Formatter; import com.djrapitops.plan.data.store.mutators.formatting.Formatters; import com.djrapitops.plan.data.store.mutators.formatting.PlaceholderReplacer; import com.djrapitops.plan.data.time.WorldTimes; -import com.djrapitops.plan.system.cache.CacheSystem; import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -60,7 +59,7 @@ public class InspectPage implements Page { } Benchmark.start("Inspect Parse, Fetch"); Database db = Database.getActive(); - PlayerContainer container = CacheSystem.getInstance().getDataContainerCache().getPlayerContainer(uuid); + PlayerContainer container = Database.getActive().fetch().getPlayerContainer(uuid); if (!container.getValue(PlayerKeys.REGISTERED).isPresent()) { throw new IllegalStateException("Player is not registered"); }