Fix resume-of-reindex-after-restart
This more clearly uses fReindex vs fReset to make sure we're not clearing our coinsdb needlessly when restarting after a reindex. It also makes it so that restarting after shutting down mid-reindex isn't treates specially at all during txdb loading code, as it shouldn't be.
This commit is contained in:
parent
efac91e654
commit
fce3f4f492
1 changed files with 8 additions and 6 deletions
14
src/init.cpp
14
src/init.cpp
|
@ -1400,9 +1400,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
delete pcoinscatcher;
|
delete pcoinscatcher;
|
||||||
delete pblocktree;
|
delete pblocktree;
|
||||||
|
|
||||||
pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex);
|
pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReset);
|
||||||
|
|
||||||
if (fReindex) {
|
if (fReset) {
|
||||||
pblocktree->WriteReindexing(true);
|
pblocktree->WriteReindexing(true);
|
||||||
//If we're reindexing in prune mode, wipe away unusable block files and all undo data files
|
//If we're reindexing in prune mode, wipe away unusable block files and all undo data files
|
||||||
if (fPruneMode)
|
if (fPruneMode)
|
||||||
|
@ -1414,6 +1414,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
// LoadBlockIndex will load fTxIndex from the db, or set it if
|
// LoadBlockIndex will load fTxIndex from the db, or set it if
|
||||||
// we're reindexing. It will also load fHavePruned if we've
|
// we're reindexing. It will also load fHavePruned if we've
|
||||||
// ever removed a block file from disk.
|
// ever removed a block file from disk.
|
||||||
|
// Note that it also sets fReindex based on the disk flag!
|
||||||
|
// From here on out fReindex and fReset mean something different!
|
||||||
if (!LoadBlockIndex(chainparams)) {
|
if (!LoadBlockIndex(chainparams)) {
|
||||||
strLoadError = _("Error loading block database");
|
strLoadError = _("Error loading block database");
|
||||||
break;
|
break;
|
||||||
|
@ -1448,7 +1450,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
// At this point we're either in reindex or we've loaded a useful
|
// At this point we're either in reindex or we've loaded a useful
|
||||||
// block tree into mapBlockIndex!
|
// block tree into mapBlockIndex!
|
||||||
|
|
||||||
pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex || fReindexChainState);
|
pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReset || fReindexChainState);
|
||||||
pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview);
|
pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview);
|
||||||
|
|
||||||
// If necessary, upgrade from older database format.
|
// If necessary, upgrade from older database format.
|
||||||
|
@ -1467,7 +1469,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
// The on-disk coinsdb is now in a good state, create the cache
|
// The on-disk coinsdb is now in a good state, create the cache
|
||||||
pcoinsTip = new CCoinsViewCache(pcoinscatcher);
|
pcoinsTip = new CCoinsViewCache(pcoinscatcher);
|
||||||
|
|
||||||
if (!fReindex && !fReindexChainState) {
|
if (!fReset && !fReindexChainState) {
|
||||||
// LoadChainTip sets chainActive based on pcoinsTip's best block
|
// LoadChainTip sets chainActive based on pcoinsTip's best block
|
||||||
if (!LoadChainTip(chainparams)) {
|
if (!LoadChainTip(chainparams)) {
|
||||||
strLoadError = _("Error initializing block database");
|
strLoadError = _("Error initializing block database");
|
||||||
|
@ -1476,7 +1478,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
assert(chainActive.Tip() != NULL);
|
assert(chainActive.Tip() != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fReindex) {
|
if (!fReset) {
|
||||||
// Note that RewindBlockIndex MUST run even if we're about to -reindex-chainstate.
|
// Note that RewindBlockIndex MUST run even if we're about to -reindex-chainstate.
|
||||||
// It both disconnects blocks based on chainActive, and drops block data in
|
// It both disconnects blocks based on chainActive, and drops block data in
|
||||||
// mapBlockIndex based on lack of available witness data.
|
// mapBlockIndex based on lack of available witness data.
|
||||||
|
@ -1487,7 +1489,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fReindex && !fReindexChainState) {
|
if (!fReset && !fReindexChainState) {
|
||||||
uiInterface.InitMessage(_("Verifying blocks..."));
|
uiInterface.InitMessage(_("Verifying blocks..."));
|
||||||
if (fHavePruned && GetArg("-checkblocks", DEFAULT_CHECKBLOCKS) > MIN_BLOCKS_TO_KEEP) {
|
if (fHavePruned && GetArg("-checkblocks", DEFAULT_CHECKBLOCKS) > MIN_BLOCKS_TO_KEEP) {
|
||||||
LogPrintf("Prune: pruned datadir may not have more than %d blocks; only checking available blocks",
|
LogPrintf("Prune: pruned datadir may not have more than %d blocks; only checking available blocks",
|
||||||
|
|
Loading…
Reference in a new issue