diff --git a/common/src/main/java/bisq/common/persistence/PersistenceManager.java b/common/src/main/java/bisq/common/persistence/PersistenceManager.java index 2503cba7cc..9d1dab6024 100644 --- a/common/src/main/java/bisq/common/persistence/PersistenceManager.java +++ b/common/src/main/java/bisq/common/persistence/PersistenceManager.java @@ -94,7 +94,7 @@ public class PersistenceManager { // For Priority.HIGH data we want to write to disk in any case to be on the safe side if we might have missed // a requestPersistence call after an important state update. Those are usually rather small data stores. // Otherwise we only persist if requestPersistence was called since the last persist call. - if (persistenceManager.priority == Priority.HIGH || persistenceManager.persistenceRequested) { + if (persistenceManager.priority.flushAtShutDown || persistenceManager.persistenceRequested) { // We don't know from which thread we are called so we map back to user thread when calling persistNow UserThread.execute(() -> { // We always get our completeHandler called even if exceptions happen. In case a file write fails @@ -125,18 +125,21 @@ public class PersistenceManager { /////////////////////////////////////////////////////////////////////////////////////////// public enum Priority { - LOW(1, TimeUnit.HOURS.toSeconds(1)), - MID(4, TimeUnit.MINUTES.toSeconds(30)), - HIGH(10, TimeUnit.SECONDS.toSeconds(30)); + LOW(1, TimeUnit.HOURS.toSeconds(1), false), + MID(4, TimeUnit.MINUTES.toSeconds(30), false), + HIGH(10, TimeUnit.SECONDS.toSeconds(30), true); @Getter private final int numMaxBackupFiles; @Getter private final long delayInSec; + @Getter + private final boolean flushAtShutDown; - Priority(int numMaxBackupFiles, long delayInSec) { + Priority(int numMaxBackupFiles, long delayInSec, boolean flushAtShutDown) { this.numMaxBackupFiles = numMaxBackupFiles; this.delayInSec = delayInSec; + this.flushAtShutDown = flushAtShutDown; } } @@ -176,18 +179,10 @@ public class PersistenceManager { // API /////////////////////////////////////////////////////////////////////////////////////////// - public void initialize(T persistable) { - this.initialize(persistable, persistable.getDefaultStorageFileName(), Priority.MID); - } - public void initialize(T persistable, Priority priority) { this.initialize(persistable, persistable.getDefaultStorageFileName(), priority); } - public void initialize(T persistable, String fileName) { - this.initialize(persistable, fileName, Priority.MID); - } - public void initialize(T persistable, String fileName, Priority priority) { this.persistable = persistable; this.fileName = fileName; diff --git a/core/src/main/java/bisq/core/btc/model/AddressEntryList.java b/core/src/main/java/bisq/core/btc/model/AddressEntryList.java index 88c0320cec..627edbbdd5 100644 --- a/core/src/main/java/bisq/core/btc/model/AddressEntryList.java +++ b/core/src/main/java/bisq/core/btc/model/AddressEntryList.java @@ -57,7 +57,7 @@ public final class AddressEntryList implements PersistableEnvelope, PersistedDat public AddressEntryList(PersistenceManager persistenceManager) { this.persistenceManager = persistenceManager; - persistenceManager.initialize(this, PersistenceManager.Priority.HIGH); + this.persistenceManager.initialize(this, PersistenceManager.Priority.HIGH); } @Override diff --git a/core/src/main/java/bisq/core/dao/governance/ballot/BallotListService.java b/core/src/main/java/bisq/core/dao/governance/ballot/BallotListService.java index 5af568c89e..08e195a7f1 100644 --- a/core/src/main/java/bisq/core/dao/governance/ballot/BallotListService.java +++ b/core/src/main/java/bisq/core/dao/governance/ballot/BallotListService.java @@ -73,7 +73,7 @@ public class BallotListService implements PersistedDataHost, DaoSetupService { this.validatorProvider = validatorProvider; this.persistenceManager = persistenceManager; - this.persistenceManager.initialize(ballotList); + this.persistenceManager.initialize(ballotList, PersistenceManager.Priority.LOW); } diff --git a/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVoteStorageService.java b/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVoteStorageService.java index d2f280cdd4..6696aee0b5 100644 --- a/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVoteStorageService.java +++ b/core/src/main/java/bisq/core/dao/governance/blindvote/storage/BlindVoteStorageService.java @@ -63,6 +63,11 @@ public class BlindVoteStorageService extends MapStoreService getMap() { return store.getMap(); diff --git a/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalStorageService.java b/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalStorageService.java index d99987c86a..6bf051b880 100644 --- a/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalStorageService.java +++ b/core/src/main/java/bisq/core/dao/governance/proposal/storage/appendonly/ProposalStorageService.java @@ -57,6 +57,11 @@ public class ProposalStorageService extends MapStoreService getMap() { return store.getMap(); diff --git a/core/src/main/java/bisq/core/dao/governance/proposal/storage/temp/TempProposalStorageService.java b/core/src/main/java/bisq/core/dao/governance/proposal/storage/temp/TempProposalStorageService.java index da84248468..9e40ff8663 100644 --- a/core/src/main/java/bisq/core/dao/governance/proposal/storage/temp/TempProposalStorageService.java +++ b/core/src/main/java/bisq/core/dao/governance/proposal/storage/temp/TempProposalStorageService.java @@ -57,6 +57,11 @@ public class TempProposalStorageService extends MapStoreService getMap() { return store.getMap(); diff --git a/core/src/main/java/bisq/core/trade/closed/ClosedTradableManager.java b/core/src/main/java/bisq/core/trade/closed/ClosedTradableManager.java index 96a364c558..8e6b95f4db 100644 --- a/core/src/main/java/bisq/core/trade/closed/ClosedTradableManager.java +++ b/core/src/main/java/bisq/core/trade/closed/ClosedTradableManager.java @@ -56,7 +56,7 @@ public class ClosedTradableManager implements PersistedDataHost { this.dumpDelayedPayoutTx = dumpDelayedPayoutTx; this.persistenceManager = persistenceManager; - this.persistenceManager.initialize(closedTradables, "ClosedTrades"); + this.persistenceManager.initialize(closedTradables, "ClosedTrades", PersistenceManager.Priority.HIGH); } @Override diff --git a/core/src/main/java/bisq/core/trade/failed/FailedTradesManager.java b/core/src/main/java/bisq/core/trade/failed/FailedTradesManager.java index 752ff6c572..11a9e25616 100644 --- a/core/src/main/java/bisq/core/trade/failed/FailedTradesManager.java +++ b/core/src/main/java/bisq/core/trade/failed/FailedTradesManager.java @@ -66,7 +66,7 @@ public class FailedTradesManager implements PersistedDataHost { this.dumpDelayedPayoutTx = dumpDelayedPayoutTx; this.persistenceManager = persistenceManager; - this.persistenceManager.initialize(failedTrades, "FailedTrades"); + this.persistenceManager.initialize(failedTrades, "FailedTrades", PersistenceManager.Priority.HIGH); } @Override diff --git a/desktop/src/main/java/bisq/desktop/Navigation.java b/desktop/src/main/java/bisq/desktop/Navigation.java index f8eec36449..8a4bbd0c8d 100644 --- a/desktop/src/main/java/bisq/desktop/Navigation.java +++ b/desktop/src/main/java/bisq/desktop/Navigation.java @@ -75,7 +75,7 @@ public final class Navigation implements PersistedDataHost { public Navigation(PersistenceManager persistenceManager) { this.persistenceManager = persistenceManager; - persistenceManager.initialize(navigationPath, PersistenceManager.Priority.LOW); + persistenceManager.initialize(navigationPath, PersistenceManager.Priority.MID); } @Override diff --git a/desktop/src/main/java/bisq/desktop/util/GUIUtil.java b/desktop/src/main/java/bisq/desktop/util/GUIUtil.java index 0793b9e831..cd8e01564a 100644 --- a/desktop/src/main/java/bisq/desktop/util/GUIUtil.java +++ b/desktop/src/main/java/bisq/desktop/util/GUIUtil.java @@ -215,7 +215,7 @@ public class GUIUtil { if (!directory.isEmpty()) { PersistenceManager persistenceManager = new PersistenceManager<>(new File(directory), persistenceProtoResolver, corruptedStorageFileHandler); PaymentAccountList paymentAccounts = new PaymentAccountList(accounts); - persistenceManager.initialize(paymentAccounts, fileName); + persistenceManager.initialize(paymentAccounts, fileName, PersistenceManager.Priority.HIGH); persistenceManager.persistNow(() -> { persistenceManager.shutdown(); new Popup().feedback(Res.get("guiUtil.accountExport.savedToPath", diff --git a/p2p/src/main/java/bisq/network/p2p/peers/PeerManager.java b/p2p/src/main/java/bisq/network/p2p/peers/PeerManager.java index abc6c7785c..d44efdeeb6 100644 --- a/p2p/src/main/java/bisq/network/p2p/peers/PeerManager.java +++ b/p2p/src/main/java/bisq/network/p2p/peers/PeerManager.java @@ -138,7 +138,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { this.clockWatcher = clockWatcher; this.persistenceManager = persistenceManager; - this.persistenceManager.initialize(peerList, PersistenceManager.Priority.LOW); + this.persistenceManager.initialize(peerList, PersistenceManager.Priority.MID); this.networkNode.addConnectionListener(this); setConnectionLimits(maxConnections); diff --git a/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java b/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java index 45f4a204e0..118cdd9bf5 100644 --- a/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java +++ b/p2p/src/main/java/bisq/network/p2p/storage/P2PDataStorage.java @@ -167,7 +167,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener, Pers networkNode.addMessageListener(this); networkNode.addConnectionListener(this); - this.persistenceManager.initialize(sequenceNumberMap, PersistenceManager.Priority.LOW); + this.persistenceManager.initialize(sequenceNumberMap, PersistenceManager.Priority.HIGH); } @Override diff --git a/p2p/src/main/java/bisq/network/p2p/storage/persistence/StoreService.java b/p2p/src/main/java/bisq/network/p2p/storage/persistence/StoreService.java index d6f5fbc0bc..adc1688593 100644 --- a/p2p/src/main/java/bisq/network/p2p/storage/persistence/StoreService.java +++ b/p2p/src/main/java/bisq/network/p2p/storage/persistence/StoreService.java @@ -134,9 +134,7 @@ public abstract class StoreService { initializePersistenceManager(); } - protected void initializePersistenceManager() { - persistenceManager.initialize(store); - } + protected abstract void initializePersistenceManager(); protected abstract T createStore(); }