aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/init.cpp21
-rw-r--r--src/init.h3
-rw-r--r--src/node/context.h4
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<TxIndex>(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<CoinStatsIndex>(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 <vector>
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<ChainstateManager> chainman;
std::unique_ptr<BanMan> banman;
ArgsManager* args{nullptr}; // Currently a raw pointer because the memory is not managed by this struct
+ std::vector<BaseIndex*> indexes; // raw pointers because memory is not managed by this struct
std::unique_ptr<interfaces::Chain> chain;
//! List of all chain clients (wallet processes or other client) connected to node.
std::vector<std::unique_ptr<interfaces::ChainClient>> chain_clients;