From eef595560e9ecf3a0d1db4d8ea7ecc33a49d839f Mon Sep 17 00:00:00 2001 From: furszy Date: Thu, 7 Sep 2023 11:40:41 -0300 Subject: index: coinstats reorg, fail when block cannot be reversed During a reorg, continuing execution when a block cannot be reversed leaves the coinstats index in an inconsistent state, which was surely overlooked when 'CustomRewind' was implemented. --- src/index/coinstatsindex.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index d80885f842..30a4d52a34 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -288,7 +288,9 @@ bool CoinStatsIndex::CustomRewind(const interfaces::BlockKey& current_tip, const __func__, iter_tip->GetBlockHash().ToString()); } - ReverseBlock(block, iter_tip); + if (!ReverseBlock(block, iter_tip)) { + return false; // failure cause logged internally + } iter_tip = iter_tip->GetAncestor(iter_tip->nHeight - 1); } while (new_tip_index != iter_tip); -- cgit v1.2.3 From c0bf667912064960df194ea94150976b34f7c267 Mon Sep 17 00:00:00 2001 From: furszy Date: Fri, 8 Sep 2023 10:04:14 -0300 Subject: index: add [nodiscard] attribute to functions writing to the db --- src/index/blockfilterindex.cpp | 2 +- src/index/coinstatsindex.cpp | 2 +- src/index/coinstatsindex.h | 2 +- src/index/txindex.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/index/blockfilterindex.cpp b/src/index/blockfilterindex.cpp index b23d66ac1d..ef3ec10506 100644 --- a/src/index/blockfilterindex.cpp +++ b/src/index/blockfilterindex.cpp @@ -260,7 +260,7 @@ bool BlockFilterIndex::CustomAppend(const interfaces::BlockInfo& block) return true; } -static bool CopyHeightIndexToHashIndex(CDBIterator& db_it, CDBBatch& batch, +[[nodiscard]] static bool CopyHeightIndexToHashIndex(CDBIterator& db_it, CDBBatch& batch, const std::string& index_name, int start_height, int stop_height) { diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index 30a4d52a34..9dab8ca901 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -235,7 +235,7 @@ bool CoinStatsIndex::CustomAppend(const interfaces::BlockInfo& block) return m_db->Write(DBHeightKey(block.height), value); } -static bool CopyHeightIndexToHashIndex(CDBIterator& db_it, CDBBatch& batch, +[[nodiscard]] static bool CopyHeightIndexToHashIndex(CDBIterator& db_it, CDBBatch& batch, const std::string& index_name, int start_height, int stop_height) { diff --git a/src/index/coinstatsindex.h b/src/index/coinstatsindex.h index 21ce4c4767..d6322bfa7c 100644 --- a/src/index/coinstatsindex.h +++ b/src/index/coinstatsindex.h @@ -38,7 +38,7 @@ private: CAmount m_total_unspendables_scripts{0}; CAmount m_total_unspendables_unclaimed_rewards{0}; - bool ReverseBlock(const CBlock& block, const CBlockIndex* pindex); + [[nodiscard]] bool ReverseBlock(const CBlock& block, const CBlockIndex* pindex); bool AllowPrune() const override { return true; } diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp index 2e07a35d0d..a41e6175cc 100644 --- a/src/index/txindex.cpp +++ b/src/index/txindex.cpp @@ -26,7 +26,7 @@ public: bool ReadTxPos(const uint256& txid, CDiskTxPos& pos) const; /// Write a batch of transaction positions to the DB. - bool WriteTxs(const std::vector>& v_pos); + [[nodiscard]] bool WriteTxs(const std::vector>& v_pos); }; TxIndex::DB::DB(size_t n_cache_size, bool f_memory, bool f_wipe) : -- cgit v1.2.3