refactor: inline constant return value of `BlockTreeDB::WriteBatchSync` and `BlockManager::WriteBlockIndexDB` and `BlockTreeDB::WriteFlag`
What changed, and why it matters
This commit is a simple code cleanup (refactor) in Bitcoin Core. Three functions previously returned a boolean value that was always 'true' and was always ignored by callers. The change removes those always-true return values and updates the callers accordingly. There is no security-relevant change: no new behavior, no bug fix, no vulnerability introduced or fixed.
No action required. This is a non-security refactor. Normal code review and testing procedures apply.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch changes BlockTreeDB::WriteBatchSync, BlockTreeDB::WriteFlag, and BlockManager::WriteBlockIndexDB from returning bool to returning void. These functions always returned true unconditionally, and callers either asserted on the result or treated false as a fatal error. Removing the return value simplifies the API and eliminates dead error-handling paths. The underlying database write behavior (CDBWrapper::WriteBatch and Write) is unchanged. No error-handling semantics are altered because no actual failure path existed for the removed return value.
Changed components
src/node/blockstorage.cppsrc/node/blockstorage.hsrc/test/fuzz/block_index.cppsrc/validation.cppInspect captured patch +9 / −16
diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp
index 5a54baf2..a72292cb 100644
--- a/src/node/blockstorage.cpp
+++ b/src/node/blockstorage.cpp
@@ -78,7 +78,7 @@ bool BlockTreeDB::ReadLastBlockFile(int& nFile)
return Read(DB_LAST_BLOCK, nFile);
}
-bool BlockTreeDB::WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*>>& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo)
+void BlockTreeDB::WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*>>& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo)
{
CDBBatch batch(*this);
for (const auto& [file, info] : fileInfo) {
@@ -89,13 +89,11 @@ bool BlockTreeDB::WriteBatchSync(const std::vector<std::pair<int, const CBlockFi
batch.Write(std::make_pair(DB_BLOCK_INDEX, bi->GetBlockHash()), CDiskBlockIndex{bi});
}
WriteBatch(batch, true);
- return true;
}
-bool BlockTreeDB::WriteFlag(const std::string& name, bool fValue)
+void BlockTreeDB::WriteFlag(const std::string& name, bool fValue)
{
Write(std::make_pair(DB_FLAG, name), fValue ? uint8_t{'1'} : uint8_t{'0'});
- return true;
}
bool BlockTreeDB::ReadFlag(const std::string& name, bool& fValue)
@@ -478,7 +476,7 @@ bool BlockManager::LoadBlockIndex(const std::optional<uint256>& snapshot_blockha
return true;
}
-bool BlockManager::WriteBlockIndexDB()
+void BlockManager::WriteBlockIndexDB()
{
AssertLockHeld(::cs_main);
std::vector<std::pair<int, const CBlockFileInfo*>> vFiles;
@@ -494,10 +492,7 @@ bool BlockManager::WriteBlockIndexDB()
m_dirty_blockindex.erase(it++);
}
int max_blockfile = WITH_LOCK(cs_LastBlockFile, return this->MaxBlockfileNum());
- if (!m_block_tree_db->WriteBatchSync(vFiles, max_blockfile, vBlocks)) {
- return false;
- }
- return true;
+ m_block_tree_db->WriteBatchSync(vFiles, max_blockfile, vBlocks);
}
bool BlockManager::LoadBlockIndexDB(const std::optional<uint256>& snapshot_blockhash)
diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h
index 7d6f78f2..caf291e9 100644
--- a/src/node/blockstorage.h
+++ b/src/node/blockstorage.h
@@ -52,12 +52,12 @@ class BlockTreeDB : public CDBWrapper
{
public:
using CDBWrapper::CDBWrapper;
- bool WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*>>& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo);
+ void WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*>>& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo);
bool ReadBlockFileInfo(int nFile, CBlockFileInfo& info);
bool ReadLastBlockFile(int& nFile);
void WriteReindexing(bool fReindexing);
void ReadReindexing(bool& fReindexing);
- bool WriteFlag(const std::string& name, bool fValue);
+ void WriteFlag(const std::string& name, bool fValue);
bool ReadFlag(const std::string& name, bool& fValue);
bool LoadBlockIndexGuts(const Consensus::Params& consensusParams, std::function<CBlockIndex*(const uint256&)> insertBlockIndex, const util::SignalInterrupt& interrupt)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
@@ -300,7 +300,7 @@ public:
std::unique_ptr<BlockTreeDB> m_block_tree_db GUARDED_BY(::cs_main);
- bool WriteBlockIndexDB() EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
+ void WriteBlockIndexDB() EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
bool LoadBlockIndexDB(const std::optional<uint256>& snapshot_blockhash)
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
diff --git a/src/test/fuzz/block_index.cpp b/src/test/fuzz/block_index.cpp
index eef8c2ef..5bc6240c 100644
--- a/src/test/fuzz/block_index.cpp
+++ b/src/test/fuzz/block_index.cpp
@@ -89,7 +89,7 @@ FUZZ_TARGET(block_index, .init = init_block_index)
}
// Store these files and blocks in the block index. It should not fail.
- assert(block_index.WriteBatchSync(files_info, files_count - 1, blocks_info));
+ block_index.WriteBatchSync(files_info, files_count - 1, blocks_info);
// We should be able to read every block file info we stored. Its value should correspond to
// what we stored above.
diff --git a/src/validation.cpp b/src/validation.cpp
index 7b7c8b2d..c3221185 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -2851,9 +2851,7 @@ bool Chainstate::FlushStateToDisk(
{
LOG_TIME_MILLIS_WITH_CATEGORY("write block index to disk", BCLog::BENCH);
- if (!m_blockman.WriteBlockIndexDB()) {
- return FatalError(m_chainman.GetNotifications(), state, _("Failed to write to block index database."));
- }
+ m_blockman.WriteBlockIndexDB();
}
// Finally remove any pruned files
if (fFlushForPrune) {
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.