[index] TxIndex method to wait until caught up.

In order to preserve getrawtransaction RPC behavior, there needs to be
a way for a thread to ensure the transaction index is in sync with the
current state of the blockchain.
This commit is contained in:
Jim Posen
2017-12-08 11:20:10 -08:00
parent 70d510d93c
commit f90c3a62f5
2 changed files with 30 additions and 0 deletions

View File

@@ -228,6 +228,30 @@ void TxIndex::SetBestChain(const CBlockLocator& locator)
}
}
bool TxIndex::BlockUntilSyncedToCurrentChain()
{
AssertLockNotHeld(cs_main);
if (!m_synced) {
return false;
}
{
// Skip the queue-draining stuff if we know we're caught up with
// chainActive.Tip().
LOCK(cs_main);
const CBlockIndex* chain_tip = chainActive.Tip();
const CBlockIndex* best_block_index = m_best_block_index.load();
if (best_block_index->GetAncestor(chain_tip->nHeight) == chain_tip) {
return true;
}
}
LogPrintf("%s: txindex is catching up on block notifications\n", __func__);
SyncWithValidationInterfaceQueue();
return true;
}
bool TxIndex::FindTx(const uint256& txid, CDiskTxPos& pos) const
{
return m_db->ReadTxPos(txid, pos);