aboutsummaryrefslogtreecommitdiff
path: root/src/index/base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/index/base.cpp')
-rw-r--r--src/index/base.cpp70
1 files changed, 35 insertions, 35 deletions
diff --git a/src/index/base.cpp b/src/index/base.cpp
index bcfe7215be..13d8ba5a01 100644
--- a/src/index/base.cpp
+++ b/src/index/base.cpp
@@ -31,7 +31,7 @@ template <typename... Args>
void BaseIndex::FatalErrorf(const char* fmt, const Args&... args)
{
auto message = tfm::format(fmt, args...);
- node::AbortNode(m_chain->context()->shutdown, m_chain->context()->exit_status, message);
+ node::AbortNode(m_chain->context()->shutdown, m_chain->context()->exit_status, Untranslated(message));
}
CBlockLocator GetLocator(interfaces::Chain& chain, const uint256& block_hash)
@@ -89,7 +89,7 @@ bool BaseIndex::Init()
return &m_chain->context()->chainman->GetChainstateForIndexing());
// Register to validation interface before setting the 'm_synced' flag, so that
// callbacks are not missed once m_synced is true.
- RegisterValidationInterface(this);
+ m_chain->context()->validation_signals->RegisterValidationInterface(this);
CBlockLocator locator;
if (!GetDB().ReadBestBlock(locator)) {
@@ -141,7 +141,7 @@ static const CBlockIndex* NextSyncBlock(const CBlockIndex* pindex_prev, CChain&
return chain.Next(chain.FindFork(pindex_prev));
}
-void BaseIndex::ThreadSync()
+void BaseIndex::Sync()
{
const CBlockIndex* pindex = m_best_block_index.load();
if (!m_synced) {
@@ -159,37 +159,20 @@ void BaseIndex::ThreadSync()
return;
}
- {
- LOCK(cs_main);
- const CBlockIndex* pindex_next = NextSyncBlock(pindex, m_chainstate->m_chain);
- if (!pindex_next) {
- SetBestBlockIndex(pindex);
- m_synced = true;
- // No need to handle errors in Commit. See rationale above.
- Commit();
- break;
- }
- if (pindex_next->pprev != pindex && !Rewind(pindex, pindex_next->pprev)) {
- FatalErrorf("%s: Failed to rewind index %s to a previous chain tip",
- __func__, GetName());
- return;
- }
- pindex = pindex_next;
- }
-
- auto current_time{std::chrono::steady_clock::now()};
- if (last_log_time + SYNC_LOG_INTERVAL < current_time) {
- LogPrintf("Syncing %s with block chain from height %d\n",
- GetName(), pindex->nHeight);
- last_log_time = current_time;
- }
-
- if (last_locator_write_time + SYNC_LOCATOR_WRITE_INTERVAL < current_time) {
- SetBestBlockIndex(pindex->pprev);
- last_locator_write_time = current_time;
+ const CBlockIndex* pindex_next = WITH_LOCK(cs_main, return NextSyncBlock(pindex, m_chainstate->m_chain));
+ if (!pindex_next) {
+ SetBestBlockIndex(pindex);
+ m_synced = true;
// No need to handle errors in Commit. See rationale above.
Commit();
+ break;
}
+ if (pindex_next->pprev != pindex && !Rewind(pindex, pindex_next->pprev)) {
+ FatalErrorf("%s: Failed to rewind index %s to a previous chain tip", __func__, GetName());
+ return;
+ }
+ pindex = pindex_next;
+
CBlock block;
interfaces::BlockInfo block_info = kernel::MakeBlockInfo(pindex);
@@ -205,6 +188,20 @@ void BaseIndex::ThreadSync()
__func__, pindex->GetBlockHash().ToString());
return;
}
+
+ auto current_time{std::chrono::steady_clock::now()};
+ if (last_log_time + SYNC_LOG_INTERVAL < current_time) {
+ LogPrintf("Syncing %s with block chain from height %d\n",
+ GetName(), pindex->nHeight);
+ last_log_time = current_time;
+ }
+
+ if (last_locator_write_time + SYNC_LOCATOR_WRITE_INTERVAL < current_time) {
+ SetBestBlockIndex(pindex);
+ last_locator_write_time = current_time;
+ // No need to handle errors in Commit. See rationale above.
+ Commit();
+ }
}
}
@@ -229,7 +226,8 @@ bool BaseIndex::Commit()
}
}
if (!ok) {
- return error("%s: Failed to commit latest %s state", __func__, GetName());
+ LogError("%s: Failed to commit latest %s state\n", __func__, GetName());
+ return false;
}
return true;
}
@@ -380,7 +378,7 @@ bool BaseIndex::BlockUntilSyncedToCurrentChain() const
}
LogPrintf("%s: %s is catching up on block notifications\n", __func__, GetName());
- SyncWithValidationInterfaceQueue();
+ m_chain->context()->validation_signals->SyncWithValidationInterfaceQueue();
return true;
}
@@ -393,13 +391,15 @@ bool BaseIndex::StartBackgroundSync()
{
if (!m_init) throw std::logic_error("Error: Cannot start a non-initialized index");
- m_thread_sync = std::thread(&util::TraceThread, GetName(), [this] { ThreadSync(); });
+ m_thread_sync = std::thread(&util::TraceThread, GetName(), [this] { Sync(); });
return true;
}
void BaseIndex::Stop()
{
- UnregisterValidationInterface(this);
+ if (m_chain->context()->validation_signals) {
+ m_chain->context()->validation_signals->UnregisterValidationInterface(this);
+ }
if (m_thread_sync.joinable()) {
m_thread_sync.join();