mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
Avoid pruning below the blockfilterindex sync height
This commit is contained in:
parent
00d57ff768
commit
5e112269c3
2 changed files with 14 additions and 5 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <cuckoocache.h>
|
#include <cuckoocache.h>
|
||||||
#include <flatfile.h>
|
#include <flatfile.h>
|
||||||
#include <hash.h>
|
#include <hash.h>
|
||||||
|
#include <index/blockfilterindex.h>
|
||||||
#include <index/txindex.h>
|
#include <index/txindex.h>
|
||||||
#include <logging.h>
|
#include <logging.h>
|
||||||
#include <logging/timer.h>
|
#include <logging/timer.h>
|
||||||
|
@ -2249,17 +2250,25 @@ bool CChainState::FlushStateToDisk(
|
||||||
{
|
{
|
||||||
bool fFlushForPrune = false;
|
bool fFlushForPrune = false;
|
||||||
bool fDoFullFlush = false;
|
bool fDoFullFlush = false;
|
||||||
|
|
||||||
CoinsCacheSizeState cache_state = GetCoinsCacheSizeState(&m_mempool);
|
CoinsCacheSizeState cache_state = GetCoinsCacheSizeState(&m_mempool);
|
||||||
LOCK(cs_LastBlockFile);
|
LOCK(cs_LastBlockFile);
|
||||||
if (fPruneMode && (fCheckForPruning || nManualPruneHeight > 0) && !fReindex) {
|
if (fPruneMode && (fCheckForPruning || nManualPruneHeight > 0) && !fReindex) {
|
||||||
|
// make sure we don't prune above the blockfilterindexes bestblocks
|
||||||
|
// pruning is height-based
|
||||||
|
int last_prune = m_chain.Height(); // last height we can prune
|
||||||
|
ForEachBlockFilterIndex([&](BlockFilterIndex& index) {
|
||||||
|
last_prune = std::max(1, std::min(last_prune, index.GetSummary().best_block_height));
|
||||||
|
});
|
||||||
|
|
||||||
if (nManualPruneHeight > 0) {
|
if (nManualPruneHeight > 0) {
|
||||||
LOG_TIME_MILLIS_WITH_CATEGORY("find files to prune (manual)", BCLog::BENCH);
|
LOG_TIME_MILLIS_WITH_CATEGORY("find files to prune (manual)", BCLog::BENCH);
|
||||||
|
|
||||||
m_blockman.FindFilesToPruneManual(setFilesToPrune, nManualPruneHeight, m_chain.Height());
|
m_blockman.FindFilesToPruneManual(setFilesToPrune, std::min(last_prune, nManualPruneHeight), m_chain.Height());
|
||||||
} else {
|
} else {
|
||||||
LOG_TIME_MILLIS_WITH_CATEGORY("find files to prune", BCLog::BENCH);
|
LOG_TIME_MILLIS_WITH_CATEGORY("find files to prune", BCLog::BENCH);
|
||||||
|
|
||||||
m_blockman.FindFilesToPrune(setFilesToPrune, chainparams.PruneAfterHeight(), m_chain.Height(), IsInitialBlockDownload());
|
m_blockman.FindFilesToPrune(setFilesToPrune, chainparams.PruneAfterHeight(), m_chain.Height(), last_prune, IsInitialBlockDownload());
|
||||||
fCheckForPruning = false;
|
fCheckForPruning = false;
|
||||||
}
|
}
|
||||||
if (!setFilesToPrune.empty()) {
|
if (!setFilesToPrune.empty()) {
|
||||||
|
@ -3934,7 +3943,7 @@ void PruneBlockFilesManual(int nManualPruneHeight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlockManager::FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight, int chain_tip_height, bool is_ibd)
|
void BlockManager::FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight, int chain_tip_height, int prune_height, bool is_ibd)
|
||||||
{
|
{
|
||||||
LOCK2(cs_main, cs_LastBlockFile);
|
LOCK2(cs_main, cs_LastBlockFile);
|
||||||
if (chain_tip_height < 0 || nPruneTarget == 0) {
|
if (chain_tip_height < 0 || nPruneTarget == 0) {
|
||||||
|
@ -3944,7 +3953,7 @@ void BlockManager::FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPr
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int nLastBlockWeCanPrune = chain_tip_height - MIN_BLOCKS_TO_KEEP;
|
unsigned int nLastBlockWeCanPrune = std::min(prune_height, chain_tip_height - static_cast<int>(MIN_BLOCKS_TO_KEEP));
|
||||||
uint64_t nCurrentUsage = CalculateCurrentUsage();
|
uint64_t nCurrentUsage = CalculateCurrentUsage();
|
||||||
// We don't check to prune until after we've allocated new space for files
|
// We don't check to prune until after we've allocated new space for files
|
||||||
// So we should leave a buffer under our target to account for another allocation
|
// So we should leave a buffer under our target to account for another allocation
|
||||||
|
|
|
@ -361,7 +361,7 @@ private:
|
||||||
*
|
*
|
||||||
* @param[out] setFilesToPrune The set of file indices that can be unlinked will be returned
|
* @param[out] setFilesToPrune The set of file indices that can be unlinked will be returned
|
||||||
*/
|
*/
|
||||||
void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight, int chain_tip_height, bool is_ibd);
|
void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight, int chain_tip_height, int prune_height, bool is_ibd);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BlockMap m_block_index GUARDED_BY(cs_main);
|
BlockMap m_block_index GUARDED_BY(cs_main);
|
||||||
|
|
Loading…
Add table
Reference in a new issue