Commit Graph

996 Commits

Author SHA1 Message Date
Chris Beams
876b91e1be
Introduce LocalBitcoinNode and tests
This new class encapsulates all functionality related to detecting a
local Bitcoin node and reporting whether or not it was detected.
Previously this functionality was spread across the Config class
(formerly BisqEnvironment) with its mutable static
isLocalBitcoinNodeRunning property and the BisqSetup class with its
checkIfLocalHostNodeIsRunning method. All of this functionality now
lives within the LocalBitcoinNode class, an instance of which is wired
up via Guice and injected wherever necessary.

Note that the code for detecting whether the node is running has been
simplified, in that it is no longer wrapped in its own dedicated Thread.
There appears to be no performance benefit from doing so, and leaving it
in place would have made testing more difficult than necessary.

Several methods in BisqSetup have also been refactored to accept
callbacks indicating which step should be run next. This has the effect
of clarifying when the step2()-step5() methods will be called.
2020-01-20 16:47:52 +01:00
Chris Beams
4ea3290608
Introduce and document static Config.appDataDir()
See Javadoc added in this change and the previous commit message for
further detail and context.
2020-01-20 16:46:58 +01:00
Chris Beams
42a037e19f
Introduce and document static Config.baseCurrencyNetwork()
Previously this static property had been managed within
BaseCurrencyNetwork itself and was accessed directly by callers. Now it
is managed within Config, made private and accessed only via the
new and well-documented baseCurrencyNetwork() method. The same goes for
baseCurrencyNetworkParameters().

It is unfortunate that we must retain these mutable static fields and
accessors, but after trying to eliminate them entirely, this approach is
the lesser of two evils; attempting to use a Config instance and
instance methods only ends up being quite cumbersome to implement,
requiring Config to be injected into many more classes than it currently
is. Getting access to the BaseCurrencyNetwork is basically a special
case, and treating it specially as a static field is in the end the most
pragmatic approach.
2020-01-20 16:46:58 +01:00
Chris Beams
3a6b0ce9d8
Normalize creation of appDataDir and subdirs
Prior to this commit, the way that the appDataDir and its subdirectories
were created was a haphazard process that worked but in a fragile and
non-obvious way. When Config was instantiated, an attempt to call
btcNetworkDir.mkdir() was made, but if appDataDir did not already exist,
this call would always fail because mkdir() does not create parent
directories. This problem was never detected, though, because the
KeyStorage class happened to call mkdirs() on its 'keys' subdirectory,
which, because of the plural mkdirs() call ended up creating the whole
${appDataDir}/${btcNetworkDir}/keys hierarchy. Other btcNetworkDir
subdirectories such as tor/ and db/ then benefited from the hierarchy
already existing when they attempted to call mkdir() for their own dirs.
So the whole arrangement worked only because KeyStorage happened to make
a mkdirs() call and because that code in KeyStorage happened to get
invoked before the code that managed the other subdirectories.

This change ensures that appDataDir and all its subdirectories are
created up front, such that they are guaranteed to exist by the time
they are injected into Storage, KeyStorage, WalletsSetup and TorSetup.
The hierarchy is unchanged, structured as it always has been:

    ${appDataDir}
    └── btc_mainnet
        ├── db
        ├── keys
        ├── wallet
        └── tor

Note that the tor/ subdirectory actually gets deleted and re-created
within the TorSetup infrastructure regardless of whether the directory
exists beforehand.
2020-01-20 16:46:57 +01:00
Chris Beams
174d2a98e6
Add comments to Config and reorder a few things
This adds a few basic comments to help understand the structure of the
Config class and also reorders several assignments and statements for
clarity.
2020-01-20 16:46:57 +01:00
Chris Beams
a02eea9410
Extract Config.APP_DATA_DIR constant 2020-01-20 16:46:57 +01:00
Chris Beams
e67746b0a4
Remove TestConfig in favor of reworked Config ctors 2020-01-20 16:46:57 +01:00
Chris Beams
47794174a1
Remove ConnectionConfig console output 2020-01-20 16:46:57 +01:00
Chris Beams
b5503a5aa4
Replace HelpRequested exception with Config.isHelpRequested() 2020-01-20 16:46:57 +01:00
Chris Beams
3f605f873f
Remove now unused BisqExecutable option handling
Option handling is now the responsibility of the Config class. JOpt's
OptionParser is no longer passed down to BisqExecutable subclasses'
doExecute method, as they can now rely on the Config abstraction.
2020-01-20 16:46:56 +01:00
Chris Beams
7382344618
Catch ConfigException as contingency, Throwble as fault
Previously the code under bisq.common.config threw a mix of
ConfigException and IllegalArgumentException. It now throws
ConfigException consistently such that it may be caught and dealt with
as an anticipated contingency, and such that any other Throwable may be
caught and dealt with as a fault, i.e. an unexpected error that probably
represents a bug in the code.

The https://bisq.network/issues link presented to the user when a fault
occurs is a redirect added to the website by PR
https://github.com/bisq-network/bisq-website/pull/316.

For background on contingency vs. fault nomenclature, see:
https://www.oracle.com/technical-resources/articles/enterprise-architecture/effective-exceptions-part3.html
2020-01-20 16:46:56 +01:00
Chris Beams
022b5f1908
Make ConfigException extend BisqException
To avoid the need to manually use String.format during construction.
2020-01-20 16:46:56 +01:00
Chris Beams
75ab51de1a
Replace use of Spring's StringUtils 2020-01-20 16:41:20 +01:00
Chris Beams
2c7829948b
Replace uses of Spring CollectionUtils
See Javadoc in new bisq.common.util.CollectionUtils class.
2020-01-20 16:41:19 +01:00
Chris Beams
f5a1854762
Remove now unused BisqEnvironment class
In previous commits, BisqEnvironment functionality has been fully ported
to the new, simpler and more type-safe Config class. This change removes
BisqEnvironment and all dependencies on the Spring Framework Environment
interface that it implements.

The one exception is the pricenode module, which is separate and apart
from the rest of the codebase in that it is a standalone, Spring-based
HTTP service.
2020-01-20 16:41:19 +01:00
Chris Beams
15c492b5b4
Finish moving 'daoActivated' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
aadf7c76aa
Move 'genesisTotalSupply' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
ca5b260806
Move 'genesisBlockHeight' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
6ea146444f
Move 'genesisTxId' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
519259b752
Move 'fullDaoNode' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
2995bc27bd
Move 'dumpBlockchainData' option handling to Config 2020-01-20 16:40:31 +01:00
Chris Beams
9a7eedb250
Move 'rpcBlockNotificationHost' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
3841e6b1dd
Move 'rpcBlockNotificationPort' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
86e1ae1008
Move 'rpcPort' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
182f472394
Move 'rpcHost' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
b4d4ca4fbe
Move 'rpcPassword' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
80754ed3d5
Move 'rpcUser' option handling to Config 2020-01-20 16:40:30 +01:00
Chris Beams
99cf8c9596
Move 'numConnectionsForBtc' option handling to Config
Note that this change makes the user-facing change of renaming
the 'numConnectionForBtc' (singular 'Connection') to
'numConnectionsForBtc' (plural 'Connections'). It is presumed that not
many users are relying on this option for day-to-day operations, and the
singular version was pretty clearly a typo / oversight.
2020-01-20 16:40:29 +01:00
Chris Beams
c8d739ded5
Move 'userAgent' option handling to Config 2020-01-20 16:39:36 +01:00
Chris Beams
97cafaf61e
Move 'useAllProvidedNodes' option handling to Config 2020-01-20 16:39:35 +01:00
Chris Beams
b7889dd994
Move 'socks5DiscoverMode' option handling to Config 2020-01-20 16:39:35 +01:00
Chris Beams
90031543b9
Move 'useTorForBtc' option handling to Config 2020-01-20 16:39:35 +01:00
Chris Beams
5271d4d574
Move 'btcNodes' option handling to Config 2020-01-20 16:39:35 +01:00
Chris Beams
4fb60a33ac
Finish moving 'ignoreLocalBtcNode' option handling to Config 2020-01-20 16:39:35 +01:00
Chris Beams
85285890d1
Move Config.log declaration 2020-01-20 16:39:35 +01:00
Chris Beams
769c62b7b3
Finish moving 'bitcoinRegtestHost' option handling to Config 2020-01-20 16:39:34 +01:00
Chris Beams
be97190415
Rename Config.{NULL_INT=>DEFAULT_INT} for clarity 2020-01-20 16:39:34 +01:00
Chris Beams
3002b16776
Make defaultUserDataDir field a local variable 2020-01-20 16:39:34 +01:00
Chris Beams
2dbd72b358
Move message throttle option handling to Config 2020-01-20 16:39:34 +01:00
Chris Beams
ca3719a139
Move 'torStreamIsolation' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
25604c1b29
Move 'torControlUseSafeCookieAuth' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
e90b2566a9
Move 'torControlCookieFile' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
5966d0ddcb
Move 'torControlPassword' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
d25ad0d266
Move 'torControlPort' option handling to Config
Note the introduction of Config.NULL_INT to avoid needing to inject
nullable boxed Integers in cases like this.
2020-01-20 16:39:33 +01:00
Chris Beams
923ec69966
Move 'torrcOptions' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
fea3a641c0
Move 'torrcFile' option handling to Config 2020-01-20 16:39:33 +01:00
Chris Beams
5a0683e984
Move 'socks5ProxyHttpAddress' option handling to Config 2020-01-20 16:39:32 +01:00
Chris Beams
5c02b12043
Move 'socks5ProxyBtcAddress' option handling to Config 2020-01-20 16:39:32 +01:00
Chris Beams
8d6dbad484
Move 'maxConnections' option handling to Config 2020-01-20 16:39:32 +01:00
Chris Beams
0e48a3ef2c
Move 'useLocalhostForP2P' option handling to Config 2020-01-20 16:39:32 +01:00