aboutsummaryrefslogtreecommitdiff
path: root/src/index/txindex.cpp
diff options
context:
space:
mode:
authorJim Posen <jimpo@coinbase.com>2017-12-08 11:20:10 -0800
committerJim Posen <jimpo@coinbase.com>2018-04-25 11:25:11 -0700
commitf90c3a62f506d1bc0fe26972b312f07152c79b2e (patch)
treea5a6e11dd46e84f703a21a3288036a22b1e73ce4 /src/index/txindex.cpp
parent70d510d93c08a168407f55c932ab09c644dea3b8 (diff)
[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.
Diffstat (limited to 'src/index/txindex.cpp')
-rw-r--r--src/index/txindex.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp
index 82798fbcc1..484526a6d9 100644
--- a/src/index/txindex.cpp
+++ b/src/index/txindex.cpp
@@ -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);