diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 14153e97..22f7e2d2 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -547,6 +547,16 @@ public class Controller extends Thread { ArbitraryDataStorageManager.getInstance().start(); ArbitraryDataRenderManager.getInstance().start(); + // start rebuild arbitrary resource cache timer task + if( Settings.getInstance().isRebuildArbitraryResourceCacheTaskEnabled() ) { + new Timer().schedule( + new RebuildArbitraryResourceCacheTask(), + Settings.getInstance().getRebuildArbitraryResourceCacheTaskDelay() * RebuildArbitraryResourceCacheTask.MILLIS_IN_MINUTE, + Settings.getInstance().getRebuildArbitraryResourceCacheTaskPeriod() * RebuildArbitraryResourceCacheTask.MILLIS_IN_HOUR + ); + } + + LOGGER.info("Starting online accounts manager"); OnlineAccountsManager.getInstance().start(); diff --git a/src/main/java/org/qortal/controller/arbitrary/RebuildArbitraryResourceCacheTask.java b/src/main/java/org/qortal/controller/arbitrary/RebuildArbitraryResourceCacheTask.java new file mode 100644 index 00000000..d7472325 --- /dev/null +++ b/src/main/java/org/qortal/controller/arbitrary/RebuildArbitraryResourceCacheTask.java @@ -0,0 +1,33 @@ +package org.qortal.controller.arbitrary; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryManager; + +import java.util.TimerTask; + +public class RebuildArbitraryResourceCacheTask extends TimerTask { + + private static final Logger LOGGER = LogManager.getLogger(RebuildArbitraryResourceCacheTask.class); + + public static final long MILLIS_IN_HOUR = 60 * 60 * 1000; + + public static final long MILLIS_IN_MINUTE = 60 * 1000; + + private static final String REBUILD_ARBITRARY_RESOURCE_CACHE_TASK = "Rebuild Arbitrary Resource Cache Task"; + + @Override + public void run() { + + Thread.currentThread().setName(REBUILD_ARBITRARY_RESOURCE_CACHE_TASK); + + try (final Repository repository = RepositoryManager.getRepository()) { + ArbitraryDataCacheManager.getInstance().buildArbitraryResourcesCache(repository, true); + } + catch( DataException e ) { + LOGGER.error(e.getMessage(), e); + } + } +} diff --git a/src/main/java/org/qortal/settings/Settings.java b/src/main/java/org/qortal/settings/Settings.java index 831dd881..c84eecb7 100644 --- a/src/main/java/org/qortal/settings/Settings.java +++ b/src/main/java/org/qortal/settings/Settings.java @@ -508,12 +508,43 @@ public class Settings { */ private boolean connectionPoolMonitorEnabled = false; + /** + * Buiild Arbitrary Resources Batch Size + * + * The number resources to batch per iteration when rebuilding. + */ private int buildArbitraryResourcesBatchSize = 200; + /** + * Arbitrary Indexing Priority + * + * The thread priority when indexing arbirary resources. + */ private int arbitraryIndexingPriority = 5; + /** + * Arbitrary Indexing Frequency (In Minutes) + * + * The frequency at which the arbitrary indices are cached. + */ private int arbitraryIndexingFrequency = 1; + private boolean rebuildArbitraryResourceCacheTaskEnabled = false; + + /** + * Rebuild Arbitrary Resource Cache Task Delay (In Minutes) + * + * Waiting period before the first rebuild task is started. + */ + private int rebuildArbitraryResourceCacheTaskDelay = 300; + + /** + * Rebuild Arbitrary Resource Cache Task Period (In Hours) + * + * The frequency the arbitrary resource cache is rebuilt. + */ + private int rebuildArbitraryResourceCacheTaskPeriod = 24; + // Domain mapping public static class ThreadLimit { private String messageType; @@ -1351,4 +1382,16 @@ public class Settings { public int getArbitraryIndexingFrequency() { return arbitraryIndexingFrequency; } + + public boolean isRebuildArbitraryResourceCacheTaskEnabled() { + return rebuildArbitraryResourceCacheTaskEnabled; + } + + public int getRebuildArbitraryResourceCacheTaskDelay() { + return rebuildArbitraryResourceCacheTaskDelay; + } + + public int getRebuildArbitraryResourceCacheTaskPeriod() { + return rebuildArbitraryResourceCacheTaskPeriod; + } }