OSDN Git Service

edit sync logic, make it fast (#1176)
authorPaladz <yzhu101@uottawa.ca>
Wed, 25 Jul 2018 07:42:56 +0000 (15:42 +0800)
committerGitHub <noreply@github.com>
Wed, 25 Jul 2018 07:42:56 +0000 (15:42 +0800)
* edit sync logic, make it fast

* fix ci error

netsync/block_keeper.go

index 3a96d15..637744b 100644 (file)
@@ -21,7 +21,7 @@ const (
 )
 
 var (
-       maxBlockPerMsg        = 128
+       maxBlockPerMsg        = uint64(128)
        maxBlockHeadersPerMsg = uint64(2048)
        syncTimeout           = 30 * time.Second
 
@@ -182,7 +182,7 @@ func (bk *blockKeeper) locateBlocks(locator []*bc.Hash, stopHash *bc.Hash) ([]*t
 
        blocks := []*types.Block{}
        for i, header := range headers {
-               if i >= maxBlockPerMsg {
+               if uint64(i) >= maxBlockPerMsg {
                        break
                }
 
@@ -367,10 +367,16 @@ func (bk *blockKeeper) startSync() bool {
                return true
        }
 
+       blockHeight := bk.chain.BestBlockHeight()
        peer = bk.peers.bestPeer(consensus.SFFullNode)
-       if peer != nil && peer.Height() > bk.chain.BestBlockHeight() {
+       if peer != nil && peer.Height() > blockHeight {
                bk.syncPeer = peer
-               if err := bk.regularBlockSync(peer.Height()); err != nil {
+               targetHeight := blockHeight + maxBlockPerMsg
+               if targetHeight > peer.Height() {
+                       targetHeight = peer.Height()
+               }
+
+               if err := bk.regularBlockSync(targetHeight); err != nil {
                        log.WithField("err", err).Warning("fail on regularBlockSync")
                        bk.peers.errorHandler(peer.ID(), err)
                        return false