From 225e213110602b4fd1d345167f5f92d26557f6c1 Mon Sep 17 00:00:00 2001 From: furszy Date: Fri, 16 Jun 2023 10:16:22 -0300 Subject: refactor: init indexes, decouple 'Start()' from the creation step No behavior change. The goal here is to group indexes, so we can perform the same initialization and verification process equally for all of them. The checks performed inside `StartIndexes` will be expanded in the subsequent commits. --- src/init.cpp | 21 ++++++++++++--------- src/init.h | 3 +++ src/node/context.h | 4 +++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 80205df000..7d44ccc17f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1554,25 +1554,22 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) } g_txindex = std::make_unique(interfaces::MakeChain(node), cache_sizes.tx_index, false, fReindex); - if (!g_txindex->Start()) { - return false; - } + node.indexes.emplace_back(g_txindex.get()); } for (const auto& filter_type : g_enabled_filter_types) { InitBlockFilterIndex([&]{ return interfaces::MakeChain(node); }, filter_type, cache_sizes.filter_index, false, fReindex); - if (!GetBlockFilterIndex(filter_type)->Start()) { - return false; - } + node.indexes.emplace_back(GetBlockFilterIndex(filter_type)); } if (args.GetBoolArg("-coinstatsindex", DEFAULT_COINSTATSINDEX)) { g_coin_stats_index = std::make_unique(interfaces::MakeChain(node), /*cache_size=*/0, false, fReindex); - if (!g_coin_stats_index->Start()) { - return false; - } + node.indexes.emplace_back(g_coin_stats_index.get()); } + // Now that all indexes are loaded, start them + StartIndexes(node); + // ********************************************************* Step 9: load wallet for (const auto& client : node.chain_clients) { if (!client->load()) { @@ -1878,3 +1875,9 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) return true; } + +bool StartIndexes(NodeContext& node) +{ + for (auto index : node.indexes) if (!index->Start()) return false; + return true; +} diff --git a/src/init.h b/src/init.h index 4dcf3fc51e..a050a76b3c 100644 --- a/src/init.h +++ b/src/init.h @@ -73,4 +73,7 @@ bool AppInitMain(node::NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip */ void SetupServerArgs(ArgsManager& argsman); +/** Validates requirements to run the indexes and spawns each index initial sync thread */ +bool StartIndexes(node::NodeContext& node); + #endif // BITCOIN_INIT_H diff --git a/src/node/context.h b/src/node/context.h index 91b68fa5bb..dae900ff7f 100644 --- a/src/node/context.h +++ b/src/node/context.h @@ -15,8 +15,9 @@ #include class ArgsManager; -class BanMan; class AddrMan; +class BanMan; +class BaseIndex; class CBlockPolicyEstimator; class CConnman; class CScheduler; @@ -58,6 +59,7 @@ struct NodeContext { std::unique_ptr chainman; std::unique_ptr banman; ArgsManager* args{nullptr}; // Currently a raw pointer because the memory is not managed by this struct + std::vector indexes; // raw pointers because memory is not managed by this struct std::unique_ptr chain; //! List of all chain clients (wallet processes or other client) connected to node. std::vector> chain_clients; -- cgit v1.2.3