diff options
author | fanquake <fanquake@gmail.com> | 2022-02-20 11:30:12 +0000 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2022-02-20 11:30:42 +0000 |
commit | 5f44c5c428b696af4214b2519cb2bbeb0e4a1027 (patch) | |
tree | de8d9c260c63b95f0097795863e33c62b3f1903d | |
parent | ffcbaf569eaad68049852fcb349e2e5021412616 (diff) | |
parent | 820c03aff5295fff68a4577aa51667198036e372 (diff) |
Merge bitcoin/bitcoin#24133: index: Improve robustness of coinstatsindex at restart
820c03aff5295fff68a4577aa51667198036e372 index: check muhash is in sync on coinstatsindex launch (Fabian Jahr)
38ed58b8503f2809e555036f4e98ff9b40a950c8 index: remove txindex references from base index (Fabian Jahr)
Pull request description:
This change lets the `coinstatsindex` fail loudly in case the internal `muhash` state differs from the last finalized output saved on disk, which would indicate that the `muhash` state somehow got out of sync. This should generally not happen since both are written to disk in a batch but #24076 seems to indicate that the might still be an issue.
Since #24076 so far can not be reproduced reliably, the issue should not be closed yet. Further investigation and testing needs to be done.
ACKs for top commit:
Sjors:
re-ACK 820c03aff5295fff68a4577aa51667198036e372
mzumsande:
re-ACK 820c03aff5295fff68a4577aa51667198036e372
ryanofsky:
Code review ACK 820c03aff5295fff68a4577aa51667198036e372. Good to catch the error earlier
Tree-SHA512: 3c985d7152698d25bad95d4ad512ff87dff13fabef790589c5a6cf93ca4251ad599e12feb7251a084503e2a213b022eaacfbaaa601464114ad372b029f64f204
-rw-r--r-- | src/index/base.h | 4 | ||||
-rw-r--r-- | src/index/coinstatsindex.cpp | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/index/base.h b/src/index/base.h index 66149686f0..c4a8215bc4 100644 --- a/src/index/base.h +++ b/src/index/base.h @@ -40,10 +40,10 @@ protected: DB(const fs::path& path, size_t n_cache_size, bool f_memory = false, bool f_wipe = false, bool f_obfuscate = false); - /// Read block locator of the chain that the txindex is in sync with. + /// Read block locator of the chain that the index is in sync with. bool ReadBestBlock(CBlockLocator& locator) const; - /// Write block locator of the chain that the txindex is in sync with. + /// Write block locator of the chain that the index is in sync with. void WriteBestBlock(CDBBatch& batch, const CBlockLocator& locator); }; diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index 7d4860b20b..a1c8a5937c 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -363,6 +363,14 @@ bool CoinStatsIndex::Init() return error("%s: Cannot read current %s state; index may be corrupted", __func__, GetName()); } + + uint256 out; + m_muhash.Finalize(out); + if (entry.muhash != out) { + return error("%s: Cannot read current %s state; index may be corrupted", + __func__, GetName()); + } + m_transaction_output_count = entry.transaction_output_count; m_bogo_size = entry.bogo_size; m_total_amount = entry.total_amount; |