diff --git a/pom.xml b/pom.xml index 33c30f79..1289f02e 100644 --- a/pom.xml +++ b/pom.xml @@ -22,12 +22,12 @@ 1.2.2 0.12.3 4.9.10 - 1.66.0 - 33.3.0-jre + 1.68.1 + 33.3.1-jre 2.2 1.2.1 2.5.1 - 75.1 + 76.1 4.12 4.0.1 2.3.9 @@ -49,7 +49,7 @@ 0.17 3.3.1 3.6.0 - 3.5.0 + 3.5.1 3.25.3 1.5.3 1.17 diff --git a/src/main/java/org/qortal/controller/BlockMinter.java b/src/main/java/org/qortal/controller/BlockMinter.java index 91dd12bb..7ea2242c 100644 --- a/src/main/java/org/qortal/controller/BlockMinter.java +++ b/src/main/java/org/qortal/controller/BlockMinter.java @@ -64,6 +64,7 @@ public class BlockMinter extends Thread { @Override public void run() { Thread.currentThread().setName("BlockMinter"); + Thread.currentThread().setPriority(MAX_PRIORITY); if (Settings.getInstance().isTopOnly() || Settings.getInstance().isLite()) { // Top only and lite nodes do not sign blocks diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 3f753c7f..20d4a58f 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -99,7 +99,7 @@ public class Controller extends Thread { private final long buildTimestamp; // seconds private final String[] savedArgs; - private ExecutorService callbackExecutor = Executors.newFixedThreadPool(3); + private ExecutorService callbackExecutor = Executors.newFixedThreadPool(4); private volatile boolean notifyGroupMembershipChange = false; /** Latest blocks on our chain. Note: tail/last is the latest block. */ @@ -406,7 +406,7 @@ public class Controller extends Thread { RepositoryManager.setRequestedCheckpoint(Boolean.TRUE); try (final Repository repository = RepositoryManager.getRepository()) { - RepositoryManager.rebuildTransactionSequences(repository); + // RepositoryManager.rebuildTransactionSequences(repository); ArbitraryDataCacheManager.getInstance().buildArbitraryResourcesCache(repository, false); } } catch (DataException e) { diff --git a/src/main/java/org/qortal/controller/PirateChainWalletController.java b/src/main/java/org/qortal/controller/PirateChainWalletController.java index e009d531..8f0c63b7 100644 --- a/src/main/java/org/qortal/controller/PirateChainWalletController.java +++ b/src/main/java/org/qortal/controller/PirateChainWalletController.java @@ -65,6 +65,7 @@ public class PirateChainWalletController extends Thread { @Override public void run() { Thread.currentThread().setName("Pirate Chain Wallet Controller"); + Thread.currentThread().setPriority(MIN_PRIORITY); try { while (running && !Controller.isStopping()) { diff --git a/src/main/java/org/qortal/controller/Synchronizer.java b/src/main/java/org/qortal/controller/Synchronizer.java index 306784f5..a624e229 100644 --- a/src/main/java/org/qortal/controller/Synchronizer.java +++ b/src/main/java/org/qortal/controller/Synchronizer.java @@ -128,6 +128,7 @@ public class Synchronizer extends Thread { @Override public void run() { Thread.currentThread().setName("Synchronizer"); + Thread.currentThread().setPriority(MAX_PRIORITY); if (Settings.getInstance().isLite()) { // Lite nodes don't need to sync diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataBuilderThread.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataBuilderThread.java index 11f613ae..7f70ac05 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataBuilderThread.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataBuilderThread.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.util.Comparator; import java.util.Map; +import static java.lang.Thread.NORM_PRIORITY; import static org.qortal.data.arbitrary.ArbitraryResourceStatus.Status.NOT_PUBLISHED; @@ -28,6 +29,7 @@ public class ArbitraryDataBuilderThread implements Runnable { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Builder Thread"); + Thread.currentThread().setPriority(NORM_PRIORITY); ArbitraryDataBuildManager buildManager = ArbitraryDataBuildManager.getInstance(); while (!Controller.isStopping()) { diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java index 36d53761..d6b9303f 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCacheManager.java @@ -41,6 +41,7 @@ public class ArbitraryDataCacheManager extends Thread { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Cache Manager"); + Thread.currentThread().setPriority(NORM_PRIORITY); try { while (!Controller.isStopping()) { diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java index 7b434acb..aa29a7b8 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataCleanupManager.java @@ -71,6 +71,7 @@ public class ArbitraryDataCleanupManager extends Thread { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Cleanup Manager"); + Thread.currentThread().setPriority(NORM_PRIORITY); // Paginate queries when fetching arbitrary transactions final int limit = 100; diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java index 12a03aee..8f734457 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataFileRequestThread.java @@ -17,6 +17,8 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Iterator; +import static java.lang.Thread.NORM_PRIORITY; + public class ArbitraryDataFileRequestThread implements Runnable { private static final Logger LOGGER = LogManager.getLogger(ArbitraryDataFileRequestThread.class); @@ -28,6 +30,7 @@ public class ArbitraryDataFileRequestThread implements Runnable { @Override public void run() { Thread.currentThread().setName("Arbitrary Data File Request Thread"); + Thread.currentThread().setPriority(NORM_PRIORITY); try { while (!Controller.isStopping()) { diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java index 37801f50..6d64e20a 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java @@ -91,6 +91,7 @@ public class ArbitraryDataManager extends Thread { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Manager"); + Thread.currentThread().setPriority(NORM_PRIORITY); // Create data directory in case it doesn't exist yet this.createDataDirectory(); diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java index 809db7af..c2a720fa 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataRenderManager.java @@ -36,6 +36,7 @@ public class ArbitraryDataRenderManager extends Thread { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Render Manager"); + Thread.currentThread().setPriority(NORM_PRIORITY); try { while (!isStopping) { diff --git a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java index 91cb9965..62feb8bd 100644 --- a/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java +++ b/src/main/java/org/qortal/controller/arbitrary/ArbitraryDataStorageManager.java @@ -72,6 +72,8 @@ public class ArbitraryDataStorageManager extends Thread { @Override public void run() { Thread.currentThread().setName("Arbitrary Data Storage Manager"); + Thread.currentThread().setPriority(NORM_PRIORITY); + try { while (!isStopping) { Thread.sleep(1000); diff --git a/src/main/java/org/qortal/controller/repository/AtStatesPruner.java b/src/main/java/org/qortal/controller/repository/AtStatesPruner.java index f06efdb8..1d601145 100644 --- a/src/main/java/org/qortal/controller/repository/AtStatesPruner.java +++ b/src/main/java/org/qortal/controller/repository/AtStatesPruner.java @@ -11,6 +11,8 @@ import org.qortal.repository.RepositoryManager; import org.qortal.settings.Settings; import org.qortal.utils.NTP; +import static java.lang.Thread.MIN_PRIORITY; + public class AtStatesPruner implements Runnable { private static final Logger LOGGER = LogManager.getLogger(AtStatesPruner.class); @@ -18,6 +20,7 @@ public class AtStatesPruner implements Runnable { @Override public void run() { Thread.currentThread().setName("AT States pruner"); + Thread.currentThread().setPriority(MIN_PRIORITY); if (Settings.getInstance().isLite()) { // Nothing to prune in lite mode diff --git a/src/main/java/org/qortal/controller/repository/AtStatesTrimmer.java b/src/main/java/org/qortal/controller/repository/AtStatesTrimmer.java index 125628f1..09454bd8 100644 --- a/src/main/java/org/qortal/controller/repository/AtStatesTrimmer.java +++ b/src/main/java/org/qortal/controller/repository/AtStatesTrimmer.java @@ -11,6 +11,8 @@ import org.qortal.repository.RepositoryManager; import org.qortal.settings.Settings; import org.qortal.utils.NTP; +import static java.lang.Thread.MIN_PRIORITY; + public class AtStatesTrimmer implements Runnable { private static final Logger LOGGER = LogManager.getLogger(AtStatesTrimmer.class); @@ -18,6 +20,7 @@ public class AtStatesTrimmer implements Runnable { @Override public void run() { Thread.currentThread().setName("AT States trimmer"); + Thread.currentThread().setPriority(MIN_PRIORITY); if (Settings.getInstance().isLite()) { // Nothing to trim in lite mode diff --git a/src/main/java/org/qortal/controller/repository/BlockArchiver.java b/src/main/java/org/qortal/controller/repository/BlockArchiver.java index a643d9b9..56ab4142 100644 --- a/src/main/java/org/qortal/controller/repository/BlockArchiver.java +++ b/src/main/java/org/qortal/controller/repository/BlockArchiver.java @@ -15,6 +15,8 @@ import org.qortal.utils.NTP; import java.io.IOException; +import static java.lang.Thread.NORM_PRIORITY; + public class BlockArchiver implements Runnable { private static final Logger LOGGER = LogManager.getLogger(BlockArchiver.class); @@ -23,6 +25,7 @@ public class BlockArchiver implements Runnable { public void run() { Thread.currentThread().setName("Block archiver"); + Thread.currentThread().setPriority(NORM_PRIORITY); if (!Settings.getInstance().isArchiveEnabled() || Settings.getInstance().isLite()) { return; diff --git a/src/main/java/org/qortal/controller/repository/BlockPruner.java b/src/main/java/org/qortal/controller/repository/BlockPruner.java index 23e3a45a..61f5b5f6 100644 --- a/src/main/java/org/qortal/controller/repository/BlockPruner.java +++ b/src/main/java/org/qortal/controller/repository/BlockPruner.java @@ -11,6 +11,8 @@ import org.qortal.repository.RepositoryManager; import org.qortal.settings.Settings; import org.qortal.utils.NTP; +import static java.lang.Thread.NORM_PRIORITY; + public class BlockPruner implements Runnable { private static final Logger LOGGER = LogManager.getLogger(BlockPruner.class); @@ -18,6 +20,7 @@ public class BlockPruner implements Runnable { @Override public void run() { Thread.currentThread().setName("Block pruner"); + Thread.currentThread().setPriority(NORM_PRIORITY); if (Settings.getInstance().isLite()) { // Nothing to prune in lite mode diff --git a/src/main/java/org/qortal/controller/repository/OnlineAccountsSignaturesTrimmer.java b/src/main/java/org/qortal/controller/repository/OnlineAccountsSignaturesTrimmer.java index d74df4b5..50d47997 100644 --- a/src/main/java/org/qortal/controller/repository/OnlineAccountsSignaturesTrimmer.java +++ b/src/main/java/org/qortal/controller/repository/OnlineAccountsSignaturesTrimmer.java @@ -12,6 +12,8 @@ import org.qortal.repository.RepositoryManager; import org.qortal.settings.Settings; import org.qortal.utils.NTP; +import static java.lang.Thread.NORM_PRIORITY; + public class OnlineAccountsSignaturesTrimmer implements Runnable { private static final Logger LOGGER = LogManager.getLogger(OnlineAccountsSignaturesTrimmer.class); @@ -20,6 +22,7 @@ public class OnlineAccountsSignaturesTrimmer implements Runnable { public void run() { Thread.currentThread().setName("Online Accounts trimmer"); + Thread.currentThread().setPriority(NORM_PRIORITY); if (Settings.getInstance().isLite()) { // Nothing to trim in lite mode diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index 0e5885ad..84ade73b 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -164,7 +164,7 @@ public class Network { maxPeers = Settings.getInstance().getMaxPeers(); // We'll use a cached thread pool but with more aggressive timeout. - ExecutorService networkExecutor = new ThreadPoolExecutor(1, + ExecutorService networkExecutor = new ThreadPoolExecutor(4, Settings.getInstance().getMaxNetworkThreadPoolSize(), NETWORK_EPC_KEEPALIVE, TimeUnit.SECONDS, new SynchronousQueue(), diff --git a/src/main/java/org/qortal/settings/Settings.java b/src/main/java/org/qortal/settings/Settings.java index c219f8fa..30db131b 100644 --- a/src/main/java/org/qortal/settings/Settings.java +++ b/src/main/java/org/qortal/settings/Settings.java @@ -218,11 +218,11 @@ public class Settings { private boolean allowConnectionsWithOlderPeerVersions = true; /** Minimum time (in seconds) that we should attempt to remain connected to a peer for */ - private int minPeerConnectionTime = 60 * 60; // seconds + private int minPeerConnectionTime = 2 * 60 * 60; // seconds /** Maximum time (in seconds) that we should attempt to remain connected to a peer for */ private int maxPeerConnectionTime = 4 * 60 * 60; // seconds /** Maximum time (in seconds) that a peer should remain connected when requesting QDN data */ - private int maxDataPeerConnectionTime = 2 * 60; // seconds + private int maxDataPeerConnectionTime = 30 * 60; // seconds /** Whether to sync multiple blocks at once in normal operation */ private boolean fastSyncEnabled = true;