X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=netsync%2Fchainmgr%2Fhandle.go;h=6e373899b0abacc348a029e77273cd184bcce7a3;hp=992a76c933557fa51e7045ba11b24a3f03408237;hb=f8b08ae822eec5e86e60863e5b00b6353490a6bd;hpb=bfbd48dc963289d578c5a4013f65f349a057b198 diff --git a/netsync/chainmgr/handle.go b/netsync/chainmgr/handle.go index 992a76c9..6e373899 100644 --- a/netsync/chainmgr/handle.go +++ b/netsync/chainmgr/handle.go @@ -25,6 +25,7 @@ const ( // Chain is the interface for Bytom core type Chain interface { BestBlockHeader() *types.BlockHeader + LastIrreversibleHeader() *types.BlockHeader BestBlockHeight() uint64 GetBlockByHash(*bc.Hash) (*types.Block, error) GetBlockByHeight(uint64) (*types.Block, error) @@ -161,7 +162,7 @@ func (m *Manager) handleGetBlocksMsg(peer *peers.Peer, msg *msgs.GetBlocksMessag rawData, err := block.MarshalText() if err != nil { log.WithFields(log.Fields{"module": logModule, "err": err}).Error("fail on handleGetBlocksMsg marshal block") - continue + return } if totalSize+len(rawData) > msgs.MaxBlockchainResponseSize/2 { @@ -181,7 +182,7 @@ func (m *Manager) handleGetBlocksMsg(peer *peers.Peer, msg *msgs.GetBlocksMessag } func (m *Manager) handleGetHeadersMsg(peer *peers.Peer, msg *msgs.GetHeadersMessage) { - headers, err := m.blockKeeper.locateHeaders(msg.GetBlockLocator(), msg.GetStopHash()) + headers, err := m.blockKeeper.locateHeaders(msg.GetBlockLocator(), msg.GetStopHash(), msg.GetSkip(), maxHeadersPerMsg) if err != nil || len(headers) == 0 { log.WithFields(log.Fields{"module": logModule, "err": err}).Debug("fail on handleGetHeadersMsg locateHeaders") return @@ -239,8 +240,8 @@ func (m *Manager) handleHeadersMsg(peer *peers.Peer, msg *msgs.HeadersMessage) { func (m *Manager) handleStatusMsg(basePeer peers.BasePeer, msg *msgs.StatusMessage) { if peer := m.peers.GetPeer(basePeer.ID()); peer != nil { - peer.SetStatus(msg.Height, msg.GetHash()) - return + peer.SetBestStatus(msg.BestHeight, msg.GetBestHash()) + peer.SetIrreversibleStatus(msg.IrreversibleHeight, msg.GetIrreversibleHash()) } } @@ -350,7 +351,7 @@ func (m *Manager) SendStatus(peer peers.BasePeer) error { return errors.New("invalid peer") } - if err := p.SendStatus(m.chain.BestBlockHeader()); err != nil { + if err := p.SendStatus(m.chain.BestBlockHeader(), m.chain.LastIrreversibleHeader()); err != nil { m.peers.RemovePeer(p.ID()) return err } @@ -363,7 +364,7 @@ func (m *Manager) Start() error { if err != nil { return err } - + m.blockKeeper.start() go m.broadcastTxsLoop() go m.syncMempoolLoop() @@ -372,5 +373,6 @@ func (m *Manager) Start() error { //Stop stop sync manager func (m *Manager) Stop() { + m.blockKeeper.stop() close(m.quit) }