X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=netsync%2Fchainmgr%2Fblock_keeper.go;h=80c12779fe7e567dff33cf6a81e94256df4f631b;hp=43f8521e4a51ffe23878ed8fdf153701ee0d4a61;hb=669d176c004324fe81a26261a6e41ddea95b6f17;hpb=068fc645e200e34e38a75dc283e3e4f05ab15d7f diff --git a/netsync/chainmgr/block_keeper.go b/netsync/chainmgr/block_keeper.go index 43f8521e..80c12779 100644 --- a/netsync/chainmgr/block_keeper.go +++ b/netsync/chainmgr/block_keeper.go @@ -22,8 +22,9 @@ const ( ) var ( - maxNumOfBlocksPerMsg = uint64(1000) - maxNumOfHeadersPerMsg = uint64(1000) + maxNumOfBlocksPerMsg = uint64(1000) + maxNumOfHeadersPerMsg = uint64(1000) + maxNumOfBlocksRegularSync = uint64(128) ) type FastSync interface { @@ -111,7 +112,7 @@ func (bk *blockKeeper) locateHeaders(locator []*bc.Hash, stopHash *bc.Hash, skip headers := make([]*types.BlockHeader, 0) stopHeader, err := bk.chain.GetHeaderByHash(stopHash) if err != nil { - return headers, nil + return headers, err } if !bk.chain.InMainChain(*stopHash) || stopHeader.Height < startHeader.Height { @@ -156,8 +157,13 @@ func (bk *blockKeeper) processHeaders(peerID string, headers []*types.BlockHeade func (bk *blockKeeper) regularBlockSync() error { peerHeight := bk.syncPeer.Height() bestHeight := bk.chain.BestBlockHeight() + targetHeight := bestHeight + maxNumOfBlocksRegularSync + if targetHeight > peerHeight { + targetHeight = peerHeight + } + i := bestHeight + 1 - for i <= peerHeight { + for i <= targetHeight { block, err := bk.msgFetcher.requireBlock(bk.syncPeer.ID(), i) if err != nil { bk.peers.ProcessIllegal(bk.syncPeer.ID(), security.LevelConnException, err.Error()) @@ -185,16 +191,13 @@ func (bk *blockKeeper) start() { } func (bk *blockKeeper) checkSyncType() int { - peer := bk.peers.BestIrreversiblePeer(consensus.SFFullNode | consensus.SFFastSync) - if peer == nil { - log.WithFields(log.Fields{"module": logModule}).Debug("can't find fast sync peer") - return noNeedSync - } - bestHeight := bk.chain.BestBlockHeight() - if peerIrreversibleHeight := peer.IrreversibleHeight(); peerIrreversibleHeight >= bestHeight+minGapStartFastSync { - bk.fastSync.setSyncPeer(peer) - return fastSyncType + peer := bk.peers.BestIrreversiblePeer(consensus.SFFullNode | consensus.SFFastSync) + if peer != nil { + if peerIrreversibleHeight := peer.IrreversibleHeight(); peerIrreversibleHeight >= bestHeight+minGapStartFastSync { + bk.fastSync.setSyncPeer(peer) + return fastSyncType + } } peer = bk.peers.BestPeer(consensus.SFFullNode) @@ -203,8 +206,7 @@ func (bk *blockKeeper) checkSyncType() int { return noNeedSync } - peerHeight := peer.Height() - if peerHeight > bestHeight { + if peer.Height() > bestHeight { bk.syncPeer = peer return regularSyncType } @@ -224,6 +226,8 @@ func (bk *blockKeeper) startSync() bool { log.WithFields(log.Fields{"module": logModule, "err": err}).Warning("fail on regularBlockSync") return false } + default: + return false } return true