mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
move-only: Create WriteBlockIndexDB helper
Can be reviewed with --color-moved=dimmed-zebra --color-moved-ws=ignore-all-space
This commit is contained in:
parent
fa88cfd3f9
commit
fa467f3913
3 changed files with 22 additions and 13 deletions
|
@ -350,6 +350,26 @@ void BlockManager::Unload()
|
||||||
m_block_index.clear();
|
m_block_index.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BlockManager::WriteBlockIndexDB()
|
||||||
|
{
|
||||||
|
std::vector<std::pair<int, const CBlockFileInfo*>> vFiles;
|
||||||
|
vFiles.reserve(setDirtyFileInfo.size());
|
||||||
|
for (std::set<int>::iterator it = setDirtyFileInfo.begin(); it != setDirtyFileInfo.end();) {
|
||||||
|
vFiles.push_back(std::make_pair(*it, &vinfoBlockFile[*it]));
|
||||||
|
setDirtyFileInfo.erase(it++);
|
||||||
|
}
|
||||||
|
std::vector<const CBlockIndex*> vBlocks;
|
||||||
|
vBlocks.reserve(setDirtyBlockIndex.size());
|
||||||
|
for (std::set<CBlockIndex*>::iterator it = setDirtyBlockIndex.begin(); it != setDirtyBlockIndex.end();) {
|
||||||
|
vBlocks.push_back(*it);
|
||||||
|
setDirtyBlockIndex.erase(it++);
|
||||||
|
}
|
||||||
|
if (!m_block_tree_db->WriteBatchSync(vFiles, nLastBlockFile, vBlocks)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool BlockManager::LoadBlockIndexDB(ChainstateManager& chainman)
|
bool BlockManager::LoadBlockIndexDB(ChainstateManager& chainman)
|
||||||
{
|
{
|
||||||
if (!LoadBlockIndex(::Params().GetConsensus(), chainman)) {
|
if (!LoadBlockIndex(::Params().GetConsensus(), chainman)) {
|
||||||
|
|
|
@ -102,6 +102,7 @@ public:
|
||||||
|
|
||||||
std::unique_ptr<CBlockTreeDB> m_block_tree_db GUARDED_BY(::cs_main);
|
std::unique_ptr<CBlockTreeDB> m_block_tree_db GUARDED_BY(::cs_main);
|
||||||
|
|
||||||
|
bool WriteBlockIndexDB() EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||||
bool LoadBlockIndexDB(ChainstateManager& chainman) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
bool LoadBlockIndexDB(ChainstateManager& chainman) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2276,19 +2276,7 @@ bool CChainState::FlushStateToDisk(
|
||||||
{
|
{
|
||||||
LOG_TIME_MILLIS_WITH_CATEGORY("write block index to disk", BCLog::BENCH);
|
LOG_TIME_MILLIS_WITH_CATEGORY("write block index to disk", BCLog::BENCH);
|
||||||
|
|
||||||
std::vector<std::pair<int, const CBlockFileInfo*> > vFiles;
|
if (!m_blockman.WriteBlockIndexDB()) {
|
||||||
vFiles.reserve(setDirtyFileInfo.size());
|
|
||||||
for (std::set<int>::iterator it = setDirtyFileInfo.begin(); it != setDirtyFileInfo.end(); ) {
|
|
||||||
vFiles.push_back(std::make_pair(*it, &vinfoBlockFile[*it]));
|
|
||||||
setDirtyFileInfo.erase(it++);
|
|
||||||
}
|
|
||||||
std::vector<const CBlockIndex*> vBlocks;
|
|
||||||
vBlocks.reserve(setDirtyBlockIndex.size());
|
|
||||||
for (std::set<CBlockIndex*>::iterator it = setDirtyBlockIndex.begin(); it != setDirtyBlockIndex.end(); ) {
|
|
||||||
vBlocks.push_back(*it);
|
|
||||||
setDirtyBlockIndex.erase(it++);
|
|
||||||
}
|
|
||||||
if (!m_blockman.m_block_tree_db->WriteBatchSync(vFiles, nLastBlockFile, vBlocks)) {
|
|
||||||
return AbortNode(state, "Failed to write to block index database");
|
return AbortNode(state, "Failed to write to block index database");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue