Merge pull request #975 from obscuren/develop

core: changed log message for forks. closes #952
This commit is contained in:
Jeffrey Wilcke 2015-05-14 10:38:10 -07:00
commit 3ac34ee3c4

View File

@ -573,13 +573,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
if block.Td.Cmp(self.td) > 0 { if block.Td.Cmp(self.td) > 0 {
// Check for chain forks. If H(block.num - 1) != block.parent, we're on a fork and need to do some merging // Check for chain forks. If H(block.num - 1) != block.parent, we're on a fork and need to do some merging
if previous := self.getBlockByNumber(block.NumberU64() - 1); previous.Hash() != block.ParentHash() { if previous := self.getBlockByNumber(block.NumberU64() - 1); previous.Hash() != block.ParentHash() {
chash := cblock.Hash()
hash := block.Hash()
if glog.V(logger.Info) {
glog.Infof("Split detected. New head #%v (%x) TD=%v, was #%v (%x) TD=%v\n", block.Header().Number, hash[:4], block.Td, cblock.Header().Number, chash[:4], self.td)
}
// during split we merge two different chains and create the new canonical chain // during split we merge two different chains and create the new canonical chain
self.merge(previous, block) self.merge(previous, block)
@ -636,17 +629,21 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
// diff takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them // diff takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them
// to be part of the new canonical chain. // to be part of the new canonical chain.
func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks { func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks {
glog.V(logger.Debug).Infof("Applying diff to %x & %x\n", oldBlock.Hash().Bytes()[:4], newBlock.Hash().Bytes()[:4]) var (
newChain types.Blocks
var newChain types.Blocks commonBlock *types.Block
oldStart = oldBlock
newStart = newBlock
)
// first find common number // first find common number
for newBlock = newBlock; newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) { for newBlock = newBlock; newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) {
newChain = append(newChain, newBlock) newChain = append(newChain, newBlock)
} }
glog.V(logger.Debug).Infoln("Found common number", newBlock.Number()) numSplit := newBlock.Number()
for { for {
if oldBlock.Hash() == newBlock.Hash() { if oldBlock.Hash() == newBlock.Hash() {
commonBlock = oldBlock
break break
} }
newChain = append(newChain, newBlock) newChain = append(newChain, newBlock)
@ -654,6 +651,11 @@ func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks {
oldBlock, newBlock = self.GetBlock(oldBlock.ParentHash()), self.GetBlock(newBlock.ParentHash()) oldBlock, newBlock = self.GetBlock(oldBlock.ParentHash()), self.GetBlock(newBlock.ParentHash())
} }
if glog.V(logger.Info) {
commonHash := commonBlock.Hash()
glog.Infof("Fork detected @ %x. Reorganising chain from #%v %x to %x", commonHash[:4], numSplit, oldStart.Hash().Bytes()[:4], newStart.Hash().Bytes()[:4])
}
return newChain return newChain
} }