From 1270c8fdafb52f5988db202d601af1c15422826a Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 3 Nov 2020 11:46:25 -0500 Subject: [PATCH 1/4] Remove unused field --- .../desktop/main/dao/economy/dashboard/BsqDashboardView.java | 1 - 1 file changed, 1 deletion(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/economy/dashboard/BsqDashboardView.java b/desktop/src/main/java/bisq/desktop/main/dao/economy/dashboard/BsqDashboardView.java index 1838688b83..a8f9677ad2 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/economy/dashboard/BsqDashboardView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/economy/dashboard/BsqDashboardView.java @@ -114,7 +114,6 @@ public class BsqDashboardView extends ActivatableView implements private Coin availableAmount; private int gridRow = 0; - double percentToTrim = 5; double howManyStdDevsConstituteOutlier = 10; From 185d812185e893fa1d7b6cb8bd164594be4ff14f Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 3 Nov 2020 11:46:41 -0500 Subject: [PATCH 2/4] Add logs for sig int --- common/src/main/java/bisq/common/setup/CommonSetup.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/java/bisq/common/setup/CommonSetup.java b/common/src/main/java/bisq/common/setup/CommonSetup.java index f2fac170fc..5562787ff7 100644 --- a/common/src/main/java/bisq/common/setup/CommonSetup.java +++ b/common/src/main/java/bisq/common/setup/CommonSetup.java @@ -102,11 +102,13 @@ public class CommonSetup { protected static void setupSigIntHandlers(GracefulShutDownHandler gracefulShutDownHandler) { Signal.handle(new Signal("INT"), signal -> { + log.info("Received {}", signal); UserThread.execute(() -> gracefulShutDownHandler.gracefulShutDown(() -> { })); }); Signal.handle(new Signal("TERM"), signal -> { + log.info("Received {}", signal); UserThread.execute(() -> gracefulShutDownHandler.gracefulShutDown(() -> { })); }); From 4161ecf2395396b7802976a35942726089be1f73 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 3 Nov 2020 11:48:58 -0500 Subject: [PATCH 3/4] Fix bugs with reading historical data - Use fileName not getFileName() in readHistoricalStoreFromResources - use complete handler once reading of all historical data is completed where we build the ImmutableMaps and complete the readFromResources method --- .../HistoricalDataStoreService.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/p2p/src/main/java/bisq/network/p2p/storage/persistence/HistoricalDataStoreService.java b/p2p/src/main/java/bisq/network/p2p/storage/persistence/HistoricalDataStoreService.java index e96112308c..2bed3ba51c 100644 --- a/p2p/src/main/java/bisq/network/p2p/storage/persistence/HistoricalDataStoreService.java +++ b/p2p/src/main/java/bisq/network/p2p/storage/persistence/HistoricalDataStoreService.java @@ -29,6 +29,7 @@ import java.io.File; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import lombok.extern.slf4j.Slf4j; @@ -154,14 +155,18 @@ public abstract class HistoricalDataStoreService allHistoricalPayloadsBuilder = ImmutableMap.builder(); ImmutableMap.Builder> storesByVersionBuilder = ImmutableMap.builder(); + AtomicInteger numFiles = new AtomicInteger(Version.HISTORICAL_RESOURCE_FILE_VERSION_TAGS.size()); Version.HISTORICAL_RESOURCE_FILE_VERSION_TAGS.forEach(version -> readHistoricalStoreFromResources(version, postFix, allHistoricalPayloadsBuilder, - storesByVersionBuilder)); - - allHistoricalPayloads = allHistoricalPayloadsBuilder.build(); - storesByVersion = storesByVersionBuilder.build(); - completeHandler.run(); + storesByVersionBuilder, + () -> { + if (numFiles.decrementAndGet() == 0) { + allHistoricalPayloads = allHistoricalPayloadsBuilder.build(); + storesByVersion = storesByVersionBuilder.build(); + completeHandler.run(); + } + })); }); } @@ -173,21 +178,24 @@ public abstract class HistoricalDataStoreService allHistoricalDataBuilder, - ImmutableMap.Builder> storesByVersionBuilder) { + ImmutableMap.Builder> storesByVersionBuilder, + Runnable completeHandler) { String fileName = getFileName() + "_" + version; boolean wasCreatedFromResources = makeFileFromResourceFile(fileName, postFix); // If resource file does not exist we do not create a new store as it would never get filled. - persistenceManager.readPersisted(getFileName(), persisted -> { + persistenceManager.readPersisted(fileName, persisted -> { storesByVersionBuilder.put(version, persisted); allHistoricalDataBuilder.putAll(persisted.getMap()); - + log.info("We have read from {} {} historical items.", fileName, persisted.getMap().size()); if (wasCreatedFromResources) { pruneStore(persisted, version); } + completeHandler.run(); }, () -> { log.warn("Resource file with file name {} does not exits.", fileName); + completeHandler.run(); }); } From ab5645b864b8703ffd55e1005edcc48acc7b2049 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 3 Nov 2020 13:01:35 -0500 Subject: [PATCH 4/4] Fix issue with getting complete handler called twice from P2PService We used a delegate method in P2PService for calling readPersisted on p2PDataStorage and peerManager. This was from old times when those classed have not been injected classes. The complete handlers got called from both p2PDataStorage and peerManager but we counted only P2PService as host, so the countdown completed before the last host was really completed, leading to a nullpointer in MainView (not always). We removed now PersistedDataHost interface from P2PService and use P2PDataStorage and PeerManager to be added to hosts. --- .../java/bisq/core/app/BisqExecutable.java | 4 ++-- .../bisq/core/app/misc/AppSetupWithP2P.java | 19 ++++++++++++------- .../core/app/misc/AppSetupWithP2PAndDAO.java | 9 ++++++--- .../core/setup/CorePersistedDataHost.java | 6 ++++-- .../java/bisq/network/p2p/P2PService.java | 9 +-------- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/bisq/core/app/BisqExecutable.java b/core/src/main/java/bisq/core/app/BisqExecutable.java index 18104e292e..b96ca3c865 100644 --- a/core/src/main/java/bisq/core/app/BisqExecutable.java +++ b/core/src/main/java/bisq/core/app/BisqExecutable.java @@ -168,8 +168,8 @@ public abstract class BisqExecutable implements GracefulShutDownHandler, BisqSet } AtomicInteger remaining = new AtomicInteger(hosts.size()); - hosts.forEach(e -> { - e.readPersisted(() -> { + hosts.forEach(host -> { + host.readPersisted(() -> { if (remaining.decrementAndGet() == 0) { UserThread.execute(completeHandler); } diff --git a/core/src/main/java/bisq/core/app/misc/AppSetupWithP2P.java b/core/src/main/java/bisq/core/app/misc/AppSetupWithP2P.java index 8827636559..952d63e3b8 100644 --- a/core/src/main/java/bisq/core/app/misc/AppSetupWithP2P.java +++ b/core/src/main/java/bisq/core/app/misc/AppSetupWithP2P.java @@ -19,7 +19,6 @@ package bisq.core.app.misc; import bisq.core.account.sign.SignedWitnessService; import bisq.core.account.witness.AccountAgeWitnessService; -import bisq.core.app.TorSetup; import bisq.core.filter.FilterManager; import bisq.core.trade.statistics.TradeStatisticsManager; @@ -28,6 +27,8 @@ import bisq.network.p2p.P2PServiceListener; import bisq.network.p2p.network.CloseConnectionReason; import bisq.network.p2p.network.Connection; import bisq.network.p2p.network.ConnectionListener; +import bisq.network.p2p.peers.PeerManager; +import bisq.network.p2p.storage.P2PDataStorage; import bisq.common.config.Config; import bisq.common.proto.persistable.PersistedDataHost; @@ -47,32 +48,36 @@ public class AppSetupWithP2P extends AppSetup { protected final AccountAgeWitnessService accountAgeWitnessService; private final SignedWitnessService signedWitnessService; protected final FilterManager filterManager; - private final TorSetup torSetup; - protected BooleanProperty p2pNetWorkReady; + private final P2PDataStorage p2PDataStorage; + private final PeerManager peerManager; protected final TradeStatisticsManager tradeStatisticsManager; protected ArrayList persistedDataHosts; + protected BooleanProperty p2pNetWorkReady; @Inject public AppSetupWithP2P(P2PService p2PService, + P2PDataStorage p2PDataStorage, + PeerManager peerManager, TradeStatisticsManager tradeStatisticsManager, AccountAgeWitnessService accountAgeWitnessService, SignedWitnessService signedWitnessService, FilterManager filterManager, - TorSetup torSetup, Config config) { super(config); this.p2PService = p2PService; + this.p2PDataStorage = p2PDataStorage; + this.peerManager = peerManager; this.tradeStatisticsManager = tradeStatisticsManager; this.accountAgeWitnessService = accountAgeWitnessService; this.signedWitnessService = signedWitnessService; this.filterManager = filterManager; - this.torSetup = torSetup; this.persistedDataHosts = new ArrayList<>(); } @Override public void initPersistedDataHosts() { - persistedDataHosts.add(p2PService); + persistedDataHosts.add(p2PDataStorage); + persistedDataHosts.add(peerManager); // we apply at startup the reading of persisted data but don't want to get it triggered in the constructor persistedDataHosts.forEach(e -> { @@ -88,7 +93,7 @@ public class AppSetupWithP2P extends AppSetup { @Override protected void initBasicServices() { String postFix = "_" + config.baseCurrencyNetwork.name(); - p2PService.getP2PDataStorage().readFromResources(postFix, this::startInitP2PNetwork); + p2PDataStorage.readFromResources(postFix, this::startInitP2PNetwork); } private void startInitP2PNetwork() { diff --git a/core/src/main/java/bisq/core/app/misc/AppSetupWithP2PAndDAO.java b/core/src/main/java/bisq/core/app/misc/AppSetupWithP2PAndDAO.java index 3331906c8d..95751832c9 100644 --- a/core/src/main/java/bisq/core/app/misc/AppSetupWithP2PAndDAO.java +++ b/core/src/main/java/bisq/core/app/misc/AppSetupWithP2PAndDAO.java @@ -19,7 +19,6 @@ package bisq.core.app.misc; import bisq.core.account.sign.SignedWitnessService; import bisq.core.account.witness.AccountAgeWitnessService; -import bisq.core.app.TorSetup; import bisq.core.dao.DaoSetup; import bisq.core.dao.governance.ballot.BallotListService; import bisq.core.dao.governance.blindvote.MyBlindVoteListService; @@ -31,6 +30,8 @@ import bisq.core.filter.FilterManager; import bisq.core.trade.statistics.TradeStatisticsManager; import bisq.network.p2p.P2PService; +import bisq.network.p2p.peers.PeerManager; +import bisq.network.p2p.storage.P2PDataStorage; import bisq.common.config.Config; @@ -44,6 +45,8 @@ public class AppSetupWithP2PAndDAO extends AppSetupWithP2P { @Inject public AppSetupWithP2PAndDAO(P2PService p2PService, + P2PDataStorage p2PDataStorage, + PeerManager peerManager, TradeStatisticsManager tradeStatisticsManager, AccountAgeWitnessService accountAgeWitnessService, SignedWitnessService signedWitnessService, @@ -55,14 +58,14 @@ public class AppSetupWithP2PAndDAO extends AppSetupWithP2P { MyProposalListService myProposalListService, MyReputationListService myReputationListService, MyProofOfBurnListService myProofOfBurnListService, - TorSetup torSetup, Config config) { super(p2PService, + p2PDataStorage, + peerManager, tradeStatisticsManager, accountAgeWitnessService, signedWitnessService, filterManager, - torSetup, config); this.daoSetup = daoSetup; diff --git a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java index 426504a407..35b042dfdb 100644 --- a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java +++ b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java @@ -35,7 +35,8 @@ import bisq.core.trade.failed.FailedTradesManager; import bisq.core.user.Preferences; import bisq.core.user.User; -import bisq.network.p2p.P2PService; +import bisq.network.p2p.peers.PeerManager; +import bisq.network.p2p.storage.P2PDataStorage; import bisq.common.config.Config; import bisq.common.proto.persistable.PersistedDataHost; @@ -63,7 +64,8 @@ public class CorePersistedDataHost { persistedDataHosts.add(injector.getInstance(ArbitrationDisputeListService.class)); persistedDataHosts.add(injector.getInstance(MediationDisputeListService.class)); persistedDataHosts.add(injector.getInstance(RefundDisputeListService.class)); - persistedDataHosts.add(injector.getInstance(P2PService.class)); + persistedDataHosts.add(injector.getInstance(P2PDataStorage.class)); + persistedDataHosts.add(injector.getInstance(PeerManager.class)); if (injector.getInstance(Config.class).daoActivated) { persistedDataHosts.add(injector.getInstance(BallotListService.class)); diff --git a/p2p/src/main/java/bisq/network/p2p/P2PService.java b/p2p/src/main/java/bisq/network/p2p/P2PService.java index 9c9fb083cf..a290406fbe 100644 --- a/p2p/src/main/java/bisq/network/p2p/P2PService.java +++ b/p2p/src/main/java/bisq/network/p2p/P2PService.java @@ -52,7 +52,6 @@ import bisq.common.crypto.KeyRing; import bisq.common.crypto.PubKeyRing; import bisq.common.proto.ProtobufferException; import bisq.common.proto.network.NetworkEnvelope; -import bisq.common.proto.persistable.PersistedDataHost; import bisq.common.util.Utilities; import com.google.inject.Inject; @@ -105,7 +104,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; public class P2PService implements SetupListener, MessageListener, ConnectionListener, RequestDataManager.Listener, - HashMapChangedListener, PersistedDataHost { + HashMapChangedListener { private static final Logger log = LoggerFactory.getLogger(P2PService.class); private final SeedNodeRepository seedNodeRepository; @@ -184,12 +183,6 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis }); } - @Override - public void readPersisted(Runnable completeHandler) { - p2PDataStorage.readPersisted(completeHandler); - peerManager.readPersisted(completeHandler); - } - /////////////////////////////////////////////////////////////////////////////////////////// // API