mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-04 10:12:28 +02:00
Merge #18923: wallet: Never schedule MaybeCompactWalletDB when -flushwallet is off
fa73493930refactor: Use C++11 range-based for loop (MarcoFalke)fa7b164d62wallet: Never schedule MaybeCompactWalletDB when -flushwallet is off (MarcoFalke)faf8401c19wallet: Pass unused args to StartWallets (MarcoFalke)fa6c186436gui tests: Limit life-time of dummy testing setup (MarcoFalke)fa28a61897test: Add smoke test to check that wallets are flushed by default (MarcoFalke) Pull request description: User-facing, this is a refactor. Internally, the scheduler does not have to call a mostly empty function every half a second. ACKs for top commit: jnewbery: utACKfa73493930meshcollider: utACKfa73493930ryanofsky: Code review ACKfa73493930. Just rebased since last review Tree-SHA512: 99e1fe1b2c22a3f4b19de3e566241d38693f4fd8d5a68ba1838d86740aa6c08e3325c11a072e30fd262a8861af4278bed52eb9374c85179b8f536477f528247c
This commit is contained in:
@@ -623,8 +623,8 @@ bool BerkeleyDatabase::PeriodicFlush()
|
||||
if (!lockDb) return false;
|
||||
|
||||
// Don't flush if any databases are in use
|
||||
for (auto it = env->mapFileUseCount.begin() ; it != env->mapFileUseCount.end(); it++) {
|
||||
if ((*it).second > 0) return false;
|
||||
for (const auto& use_count : env->mapFileUseCount) {
|
||||
if (use_count.second > 0) return false;
|
||||
}
|
||||
|
||||
// Don't flush if there haven't been any batch writes for this database.
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#ifndef BITCOIN_WALLET_CONTEXT_H
|
||||
#define BITCOIN_WALLET_CONTEXT_H
|
||||
|
||||
class ArgsManager;
|
||||
namespace interfaces {
|
||||
class Chain;
|
||||
} // namespace interfaces
|
||||
@@ -21,6 +22,7 @@ class Chain;
|
||||
//! behavior.
|
||||
struct WalletContext {
|
||||
interfaces::Chain* chain{nullptr};
|
||||
ArgsManager* args{nullptr};
|
||||
|
||||
//! Declare default constructor and destructor that are not inline, so code
|
||||
//! instantiating the WalletContext struct doesn't need to #include class
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <node/context.h>
|
||||
#include <node/ui_interface.h>
|
||||
#include <outputtype.h>
|
||||
#include <util/check.h>
|
||||
#include <util/moneystr.h>
|
||||
#include <util/system.h>
|
||||
#include <util/translation.h>
|
||||
@@ -16,9 +17,9 @@
|
||||
#include <wallet/wallet.h>
|
||||
#include <walletinitinterface.h>
|
||||
|
||||
class WalletInit : public WalletInitInterface {
|
||||
class WalletInit : public WalletInitInterface
|
||||
{
|
||||
public:
|
||||
|
||||
//! Was the wallet component compiled in.
|
||||
bool HasWalletSupport() const override {return true;}
|
||||
|
||||
@@ -112,10 +113,11 @@ bool WalletInit::ParameterInteraction() const
|
||||
|
||||
void WalletInit::Construct(NodeContext& node) const
|
||||
{
|
||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
ArgsManager& args = *Assert(node.args);
|
||||
if (args.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
LogPrintf("Wallet disabled!\n");
|
||||
return;
|
||||
}
|
||||
gArgs.SoftSetArg("-wallet", "");
|
||||
node.chain_clients.emplace_back(interfaces::MakeWalletClient(*node.chain, gArgs.GetArgs("-wallet")));
|
||||
args.SoftSetArg("-wallet", "");
|
||||
node.chain_clients.emplace_back(interfaces::MakeWalletClient(*node.chain, args, args.GetArgs("-wallet")));
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <util/system.h>
|
||||
#include <util/translation.h>
|
||||
#include <wallet/wallet.h>
|
||||
#include <wallet/walletdb.h>
|
||||
|
||||
bool VerifyWallets(interfaces::Chain& chain, const std::vector<std::string>& wallet_files)
|
||||
{
|
||||
@@ -82,14 +83,16 @@ bool LoadWallets(interfaces::Chain& chain, const std::vector<std::string>& walle
|
||||
}
|
||||
}
|
||||
|
||||
void StartWallets(CScheduler& scheduler)
|
||||
void StartWallets(CScheduler& scheduler, const ArgsManager& args)
|
||||
{
|
||||
for (const std::shared_ptr<CWallet>& pwallet : GetWallets()) {
|
||||
pwallet->postInitProcess();
|
||||
}
|
||||
|
||||
// Schedule periodic wallet flushes and tx rebroadcasts
|
||||
scheduler.scheduleEvery(MaybeCompactWalletDB, std::chrono::milliseconds{500});
|
||||
if (args.GetBoolArg("-flushwallet", DEFAULT_FLUSHWALLET)) {
|
||||
scheduler.scheduleEvery(MaybeCompactWalletDB, std::chrono::milliseconds{500});
|
||||
}
|
||||
scheduler.scheduleEvery(MaybeResendWalletTxs, std::chrono::milliseconds{1000});
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class ArgsManager;
|
||||
class CScheduler;
|
||||
|
||||
namespace interfaces {
|
||||
@@ -22,7 +23,7 @@ bool VerifyWallets(interfaces::Chain& chain, const std::vector<std::string>& wal
|
||||
bool LoadWallets(interfaces::Chain& chain, const std::vector<std::string>& wallet_files);
|
||||
|
||||
//! Complete startup of wallets.
|
||||
void StartWallets(CScheduler& scheduler);
|
||||
void StartWallets(CScheduler& scheduler, const ArgsManager& args);
|
||||
|
||||
//! Flush all wallets in preparation for shutdown.
|
||||
void FlushWallets();
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <fs.h>
|
||||
#include <util/check.h>
|
||||
#include <util/system.h>
|
||||
|
||||
#include <wallet/test/init_test_fixture.h>
|
||||
|
||||
InitWalletDirTestingSetup::InitWalletDirTestingSetup(const std::string& chainName): BasicTestingSetup(chainName)
|
||||
InitWalletDirTestingSetup::InitWalletDirTestingSetup(const std::string& chainName) : BasicTestingSetup(chainName)
|
||||
{
|
||||
m_chain_client = MakeWalletClient(*m_chain, {});
|
||||
m_chain_client = MakeWalletClient(*m_chain, *Assert(m_node.args), {});
|
||||
|
||||
std::string sep;
|
||||
sep += fs::path::preferred_separator;
|
||||
|
||||
@@ -10,17 +10,18 @@
|
||||
#include <interfaces/chain.h>
|
||||
#include <interfaces/wallet.h>
|
||||
#include <node/context.h>
|
||||
#include <util/check.h>
|
||||
#include <wallet/wallet.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
/** Testing setup and teardown for wallet.
|
||||
*/
|
||||
struct WalletTestingSetup: public TestingSetup {
|
||||
struct WalletTestingSetup : public TestingSetup {
|
||||
explicit WalletTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
|
||||
|
||||
std::unique_ptr<interfaces::Chain> m_chain = interfaces::MakeChain(m_node);
|
||||
std::unique_ptr<interfaces::ChainClient> m_chain_client = interfaces::MakeWalletClient(*m_chain, {});
|
||||
std::unique_ptr<interfaces::ChainClient> m_chain_client = interfaces::MakeWalletClient(*m_chain, *Assert(m_node.args), {});
|
||||
CWallet m_wallet;
|
||||
std::unique_ptr<interfaces::Handler> m_chain_notifications_handler;
|
||||
};
|
||||
|
||||
@@ -952,9 +952,6 @@ void MaybeCompactWalletDB()
|
||||
if (fOneThread.exchange(true)) {
|
||||
return;
|
||||
}
|
||||
if (!gArgs.GetBoolArg("-flushwallet", DEFAULT_FLUSHWALLET)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const std::shared_ptr<CWallet>& pwallet : GetWallets()) {
|
||||
WalletDatabase& dbh = pwallet->GetDBHandle();
|
||||
|
||||
Reference in New Issue
Block a user