core: reorg logs crashed, add a check for corner cases

This commit is contained in:
Péter Szilágyi 2017-03-03 09:54:13 +02:00
parent faf713632c
commit a38e1a9c00
No known key found for this signature in database
GPG Key ID: E9AE538CEDF8293D
1 changed files with 9 additions and 6 deletions

View File

@ -1145,13 +1145,16 @@ func (self *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
} }
} }
// Ensure the user sees large reorgs // Ensure the user sees large reorgs
logFn := log.Debug if len(oldChain) > 0 && len(newChain) > 0 {
if len(oldChain) > 63 { logFn := log.Debug
logFn = log.Warn if len(oldChain) > 63 {
logFn = log.Warn
}
logFn("Chain split detected", "number", commonBlock.Number(), "hash", commonBlock.Hash(),
"drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash())
} else {
log.Error("Impossible reorg, please file an issue", "oldnum", oldBlock.Number(), "oldhash", oldBlock.Hash(), "newnum", newBlock.Number(), "newhash", newBlock.Hash())
} }
logFn("Chain split detected", "number", commonBlock.Number(), "hash", commonBlock.Hash(),
"drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash())
var addedTxs types.Transactions var addedTxs types.Transactions
// insert blocks. Order does not matter. Last block will be written in ImportChain itself which creates the new head properly // insert blocks. Order does not matter. Last block will be written in ImportChain itself which creates the new head properly
for _, block := range newChain { for _, block := range newChain {