Skip to content

Commit ce92427

Browse files
codablockUdjinM6
andcommitted
Don't load caches when blocks/chainstate was deleted and also delete old caches (#3280)
* Don't load caches when blocks/chainstate was not present * Delete old cache files when we decided to not load them * Make sure cache files are of the exact format we expected them to be, flush empty objects into them instead of deleting files naively * Streamline logic a bit, rename fIgnoreCacheFiles to fLoadCacheFiles Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
1 parent ebf529e commit ce92427

File tree

1 file changed

+40
-14
lines changed

1 file changed

+40
-14
lines changed

src/init.cpp

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,32 +2074,58 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
20742074

20752075
// LOAD SERIALIZED DAT FILES INTO DATA CACHES FOR INTERNAL USE
20762076

2077-
bool fIgnoreCacheFiles = fLiteMode || fReindex || fReindexChainState;
2078-
if (!fIgnoreCacheFiles) {
2079-
fs::path pathDB = GetDataDir();
2080-
std::string strDBName;
2081-
2082-
strDBName = "mncache.dat";
2083-
uiInterface.InitMessage(_("Loading masternode cache..."));
2084-
CFlatDB<CMasternodeMetaMan> flatdb1(strDBName, "magicMasternodeCache");
2077+
bool fLoadCacheFiles = !(fLiteMode || fReindex || fReindexChainState);
2078+
{
2079+
LOCK(cs_main);
2080+
// was blocks/chainstate deleted?
2081+
if (chainActive.Tip() == nullptr) {
2082+
fLoadCacheFiles = false;
2083+
}
2084+
}
2085+
fs::path pathDB = GetDataDir();
2086+
std::string strDBName;
2087+
2088+
strDBName = "mncache.dat";
2089+
uiInterface.InitMessage(_("Loading masternode cache..."));
2090+
CFlatDB<CMasternodeMetaMan> flatdb1(strDBName, "magicMasternodeCache");
2091+
if (fLoadCacheFiles) {
20852092
if(!flatdb1.Load(mmetaman)) {
20862093
return InitError(_("Failed to load masternode cache from") + "\n" + (pathDB / strDBName).string());
20872094
}
2095+
} else {
2096+
CMasternodeMetaMan mmetamanTmp;
2097+
if(!flatdb1.Dump(mmetamanTmp)) {
2098+
return InitError(_("Failed to clear masternode cache at") + "\n" + (pathDB / strDBName).string());
2099+
}
2100+
}
20882101

2089-
strDBName = "governance.dat";
2090-
uiInterface.InitMessage(_("Loading governance cache..."));
2091-
CFlatDB<CGovernanceManager> flatdb3(strDBName, "magicGovernanceCache");
2102+
strDBName = "governance.dat";
2103+
uiInterface.InitMessage(_("Loading governance cache..."));
2104+
CFlatDB<CGovernanceManager> flatdb3(strDBName, "magicGovernanceCache");
2105+
if (fLoadCacheFiles) {
20922106
if(!flatdb3.Load(governance)) {
20932107
return InitError(_("Failed to load governance cache from") + "\n" + (pathDB / strDBName).string());
20942108
}
20952109
governance.InitOnLoad();
2110+
} else {
2111+
CGovernanceManager governanceTmp;
2112+
if(!flatdb3.Dump(governanceTmp)) {
2113+
return InitError(_("Failed to clear governance cache at") + "\n" + (pathDB / strDBName).string());
2114+
}
2115+
}
20962116

2097-
strDBName = "netfulfilled.dat";
2098-
uiInterface.InitMessage(_("Loading fulfilled requests cache..."));
2099-
CFlatDB<CNetFulfilledRequestManager> flatdb4(strDBName, "magicFulfilledCache");
2117+
strDBName = "netfulfilled.dat";
2118+
uiInterface.InitMessage(_("Loading fulfilled requests cache..."));
2119+
CFlatDB<CNetFulfilledRequestManager> flatdb4(strDBName, "magicFulfilledCache");
2120+
if (fLoadCacheFiles) {
21002121
if(!flatdb4.Load(netfulfilledman)) {
21012122
return InitError(_("Failed to load fulfilled requests cache from") + "\n" + (pathDB / strDBName).string());
21022123
}
2124+
} else {
2125+
CNetFulfilledRequestManager netfulfilledmanTmp;
2126+
if(!flatdb4.Dump(netfulfilledmanTmp)) {
2127+
return InitError(_("Failed to clear fulfilled requests cache at") + "\n" + (pathDB / strDBName).string());
2128+
}
21032129
}
21042130

21052131
// ********************************************************* Step 10c: schedule Dash-specific tasks

0 commit comments

Comments
 (0)