aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2023-09-12 09:30:59 +0100
committerfanquake <fanquake@gmail.com>2023-09-12 09:44:55 +0100
commitfd69ffbbfb3e08b474b33540e56cf4f81e5c21d4 (patch)
tree2aee83004ff19e33c9e9356c4ce6d61a8a0d8b1f
parent8f7b9eb8711fdb32e8bdb59d2a7462a46c7a8086 (diff)
parentc0bf667912064960df194ea94150976b34f7c267 (diff)
downloadbitcoin-fd69ffbbfb3e08b474b33540e56cf4f81e5c21d4.tar.xz
Merge bitcoin/bitcoin#28427: index: coinstats reorg, fail when block cannot be reversed
c0bf667912064960df194ea94150976b34f7c267 index: add [nodiscard] attribute to functions writing to the db (furszy) eef595560e9ecf3a0d1db4d8ea7ecc33a49d839f index: coinstats reorg, fail when block cannot be reversed (furszy) Pull request description: Found it while reviewing https://github.com/bitcoin/bitcoin/pull/24230#discussion_r1310863359. During a reorg, continuing execution when a block cannot be reversed leaves the coinstats index in an inconsistent state. This was surely overlooked when 'CustomRewind' was implemented. ACKs for top commit: ryanofsky: Code review ACK c0bf667912064960df194ea94150976b34f7c267. Only change since last review is new commit adding [[nodiscard]] Tree-SHA512: f4fc8522508d23e4fff09a29c935971819b1bd3b2a260e08e2e2b72f9340980d74fbec742a58fe216baf61d27de057c7c8300e8fa075f8507cd1227f128af909
-rw-r--r--src/index/blockfilterindex.cpp2
-rw-r--r--src/index/coinstatsindex.cpp6
-rw-r--r--src/index/coinstatsindex.h2
-rw-r--r--src/index/txindex.cpp2
4 files changed, 7 insertions, 5 deletions
diff --git a/src/index/blockfilterindex.cpp b/src/index/blockfilterindex.cpp
index 21132d9305..5fda798efd 100644
--- a/src/index/blockfilterindex.cpp
+++ b/src/index/blockfilterindex.cpp
@@ -261,7 +261,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 d80885f842..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)
{
@@ -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);
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 0d4de3a53e..3c9ec84e24 100644
--- a/src/index/txindex.cpp
+++ b/src/index/txindex.cpp
@@ -27,7 +27,7 @@ public:
bool ReadTxPos(const uint256& txid, CDiskTxPos& pos) const;
/// Write a batch of transaction positions to the DB.
- bool WriteTxs(const std::vector<std::pair<uint256, CDiskTxPos>>& v_pos);
+ [[nodiscard]] bool WriteTxs(const std::vector<std::pair<uint256, CDiskTxPos>>& v_pos);
};
TxIndex::DB::DB(size_t n_cache_size, bool f_memory, bool f_wipe) :