aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2022-02-20 11:30:12 +0000
committerfanquake <fanquake@gmail.com>2022-02-20 11:30:42 +0000
commit5f44c5c428b696af4214b2519cb2bbeb0e4a1027 (patch)
treede8d9c260c63b95f0097795863e33c62b3f1903d
parentffcbaf569eaad68049852fcb349e2e5021412616 (diff)
parent820c03aff5295fff68a4577aa51667198036e372 (diff)
downloadbitcoin-5f44c5c428b696af4214b2519cb2bbeb0e4a1027.tar.xz
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.h4
-rw-r--r--src/index/coinstatsindex.cpp8
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;