From 9c18899d66c284818e43afe8d7b4113b6cb67ba0 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 23 Nov 2021 15:13:55 +0100 Subject: [PATCH 1/2] Enforce inclusion of TradeLimits for headless apps PaymentMethod use an instance of TradeLimits and expect that it has been injected, which is the case for desktop but not for headless apps, so we enforce injection in the app base classes used for headless apps. The validation of trade statistics use a method in PaymentMethod where that dependency is required. Tha hack how the PaymentMethod use TradeLimits is not nice, but would require more effort for refactoring. --- core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java | 6 ++++++ .../java/bisq/core/app/misc/ExecutableForAppWithP2p.java | 8 ++++++++ daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java | 2 ++ seednode/src/main/java/bisq/seednode/SeedNodeMain.java | 2 ++ .../src/main/java/bisq/statistics/StatisticsMain.java | 2 ++ 5 files changed, 20 insertions(+) diff --git a/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java b/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java index 6a867d875b9..4a1de618326 100644 --- a/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java +++ b/core/src/main/java/bisq/core/app/BisqHeadlessAppMain.java @@ -17,6 +17,8 @@ package bisq.core.app; +import bisq.core.payment.TradeLimits; + import bisq.common.UserThread; import bisq.common.app.AppModule; import bisq.common.app.Version; @@ -31,6 +33,7 @@ @Slf4j public class BisqHeadlessAppMain extends BisqExecutable { protected HeadlessApp headlessApp; + private TradeLimits tradeLimits; public BisqHeadlessAppMain() { super("Bisq Daemon", "bisqd", "Bisq", Version.VERSION); @@ -108,6 +111,9 @@ protected void applyInjector() { @Override protected void startApplication() { + // Pin that as it is used in PaymentMethods and verification in TradeStatistics + tradeLimits = injector.getInstance(TradeLimits.class); + // We need to be in user thread! We mapped at launchApplication already... headlessApp.startApplication(); diff --git a/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java b/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java index ec9bfd65b27..3552a465340 100644 --- a/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java +++ b/core/src/main/java/bisq/core/app/misc/ExecutableForAppWithP2p.java @@ -25,6 +25,7 @@ import bisq.core.dao.node.full.RpcService; import bisq.core.offer.OpenOfferManager; import bisq.core.offer.bsq_swap.OpenBsqSwapOfferService; +import bisq.core.payment.TradeLimits; import bisq.core.support.dispute.arbitration.arbitrator.ArbitratorManager; import bisq.network.p2p.NodeAddress; @@ -62,6 +63,7 @@ public abstract class ExecutableForAppWithP2p extends BisqExecutable { private static final long SHUTDOWN_INTERVAL = TimeUnit.HOURS.toMillis(24); private volatile boolean stopped; private final long startTime = System.currentTimeMillis(); + private TradeLimits tradeLimits; public ExecutableForAppWithP2p(String fullName, String scriptName, String appName, String version) { super(fullName, scriptName, appName, version); @@ -76,6 +78,12 @@ protected void configUserThread() { UserThread.setExecutor(Executors.newSingleThreadExecutor(threadFactory)); } + @Override + protected void startApplication() { + // Pin that as it is used in PaymentMethods and verification in TradeStatistics + tradeLimits = injector.getInstance(TradeLimits.class); + } + @Override public void onSetupComplete() { log.info("onSetupComplete"); diff --git a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java index a3bd88e1a03..d60a5ea4bae 100644 --- a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java +++ b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java @@ -90,6 +90,8 @@ protected void applyInjector() { @Override protected void startApplication() { + super.startApplication(); + // We need to be in user thread! We mapped at launchApplication already... headlessApp.startApplication(); diff --git a/seednode/src/main/java/bisq/seednode/SeedNodeMain.java b/seednode/src/main/java/bisq/seednode/SeedNodeMain.java index 9841b88ca63..a469350be26 100644 --- a/seednode/src/main/java/bisq/seednode/SeedNodeMain.java +++ b/seednode/src/main/java/bisq/seednode/SeedNodeMain.java @@ -137,6 +137,8 @@ private int getMyIndex() { @Override protected void startApplication() { + super.startApplication(); + Cookie cookie = injector.getInstance(User.class).getCookie(); cookie.getAsOptionalBoolean(CookieKey.CLEAN_TOR_DIR_AT_RESTART).ifPresent(wasCleanTorDirSet -> { if (wasCleanTorDirSet) { diff --git a/statsnode/src/main/java/bisq/statistics/StatisticsMain.java b/statsnode/src/main/java/bisq/statistics/StatisticsMain.java index a57ff64afb8..f271b076c4b 100644 --- a/statsnode/src/main/java/bisq/statistics/StatisticsMain.java +++ b/statsnode/src/main/java/bisq/statistics/StatisticsMain.java @@ -88,6 +88,8 @@ protected void applyInjector() { @Override protected void startApplication() { + super.startApplication(); + statistics.startApplication(); } } From becb64de5a4f6e8a4f36eb2671f9055a3b752297 Mon Sep 17 00:00:00 2001 From: chimp1984 Date: Tue, 23 Nov 2021 23:22:28 +0100 Subject: [PATCH 2/2] Remove code which is already in superclass --- daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java index d60a5ea4bae..a9e4ce2aaed 100644 --- a/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java +++ b/daemon/src/main/java/bisq/daemon/app/BisqDaemonMain.java @@ -91,13 +91,6 @@ protected void applyInjector() { @Override protected void startApplication() { super.startApplication(); - - // We need to be in user thread! We mapped at launchApplication already... - headlessApp.startApplication(); - - // In headless mode we don't have an async behaviour so we trigger the setup by - // calling onApplicationStarted. - onApplicationStarted(); } @Override