OSDN Git Service

Optimize p2p listener code
[bytom/bytom.git] / netsync / fetcher.go
index 9a0b5bd..34aa1ef 100644 (file)
@@ -149,16 +149,32 @@ func (f *Fetcher) insert(peerID string, block *types.Block) {
        // Run the actual import and log any issues
        if _, err := f.chain.ProcessBlock(block); err != nil {
                log.Info("Propagated block import failed", " from peer: ", peerID, " height: ", block.Height, "err: ", err)
-               peer := f.peers.Peer(peerID)
-               if ban := peer.addBanScore(50, 0, "block process error"); ban {
-                       f.sw.AddBannedPeer(peer.getPeer())
-                       f.sw.StopPeerGracefully(peer.getPeer())
+               fPeer, ok := f.peers.Peer(peerID)
+               if !ok {
+                       return
+               }
+               swPeer := fPeer.getPeer()
+               if ban := fPeer.addBanScore(20, 0, "block process error"); ban {
+                       f.sw.AddBannedPeer(swPeer)
+                       f.sw.StopPeerGracefully(swPeer)
                }
                return
        }
        // If import succeeded, broadcast the block
        log.Info("success process a block from new mined blocks cache. block height: ", block.Height)
-       go f.peers.BroadcastMinedBlock(block)
+       peers, err := f.peers.BroadcastMinedBlock(block)
+       if err != nil {
+               log.Errorf("Broadcast mine block error. %v", err)
+               return
+       }
+       for _, fPeer := range peers {
+               if fPeer == nil {
+                       continue
+               }
+               swPeer := fPeer.getPeer()
+               log.Info("Fetcher broadcast block error. Stop peer.")
+               f.sw.StopPeerGracefully(swPeer)
+       }
 }
 
 // forgetBlock removes all traces of a queued block from the fetcher's internal