Today, running master, letting an instance that hasn’t run for a while catch up with the chain, I suddenly have problems with corrupted undo data due to “end of file” errors.
02014-10-28 15:49:13 Verifying last 288 blocks at level 3
12014-10-28 15:49:23 ERROR: ReadFromDisk : Deserialize or I/O error - CAutoFile::read : end of file
22014-10-28 15:49:23 ERROR: VerifyDB() : *** found bad undo data at 324562, hash=0000000000000000092e4ee01f6c144f4a97bf1307e1c5e7bd49f49328c28f35
When starting with checklevel=0, the error is bypassed, however the next start of the program it fails in another place:
02014-10-28 15:53:06 Verifying last 288 blocks at level 3
12014-10-28 15:53:09 ERROR: ReadFromDisk : Deserialize or I/O error - CAutoFile::read : end of file
22014-10-28 15:53:09 ERROR: VerifyDB() : *** found bad undo data at 324695, hash=0000000000000000066a32130499df7e116f6467f418da77673748b0407bc30b
I again start with checklevel=0, and I get a whole slew of “UpdateTips” in AppInit2, after loading the wallet but before the start of the RPC threads and such.
02014-10-28 15:53:17 LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=85, size=26356604, heights=324524...325547, time=2014-10-09...2014-10-16)
12014-10-28 15:53:17 Checking all blk files are present...
22014-10-28 15:53:17 LoadBlockIndexDB(): transaction index disabled
32014-10-28 15:53:18 LoadBlockIndexDB(): hashBestChain=000000000000000009e2bf4621d87d730adf6a975688f854ba39d60cdd763271 height=324859 date=2014-10-11 14:31:06 progress=0.949969
4...
52014-10-28 15:53:19 UpdateTip: new best=0000000000000000185b8f003088ef1eff57ae472055a72c5d5ef07a3ba6c477 height=324860 log2_work=81.048227 tx=48668445 date=2014-10-11 14:38:47 progress=0.949985 cache=1168
6...
72014-10-28 15:54:52 UpdateTip: new best=00000000000000000db8f35a7986efdf8bc254660768b92105a717d5210a5594 height=325079 log2_work=81.067102 tx=48770279 date=2014-10-13 03:43:47 progress=0.9
854534 cache=38094
92014-10-28 15:54:52 mapBlockIndex.size() = 327377
So I wonder, is my undo data corrupted (and should I just -reindex), or could something else be going on that is worth debugging further, thinking it should have undo data for a block that hasn’t been processed yet?