From 66c1b5ac5b0c265df41aaf1cfb7dee427c24e040 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Thu, 29 Aug 2019 15:17:53 +0800 Subject: [PATCH] clean up --- toolbar/precog/monitor/connection.go | 45 ++++++++++++++++++++++++++++--- toolbar/precog/monitor/monitor.go | 51 +----------------------------------- 2 files changed, 43 insertions(+), 53 deletions(-) diff --git a/toolbar/precog/monitor/connection.go b/toolbar/precog/monitor/connection.go index 20093fbb..c0db747b 100644 --- a/toolbar/precog/monitor/connection.go +++ b/toolbar/precog/monitor/connection.go @@ -9,12 +9,11 @@ import ( "github.com/vapor/toolbar/precog/database/orm" ) -func (m *monitor) connectNodesRoutine() { +func (m *monitor) connectionRoutine() { // TODO: fix // ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqMinutes) * time.Minute) ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqMinutes) * time.Second) for ; true; <-ticker.C { - <-m.dialCh m.Lock() if err := m.dialNodes(); err != nil { @@ -40,6 +39,46 @@ func (m *monitor) dialNodes() error { m.sw.DialPeers(addresses) log.Info("DialPeers done.") m.processDialResults() - m.checkStatusCh <- struct{}{} + m.checkStatus() return nil } + +func (m *monitor) checkStatus() { + for _, peer := range m.sw.GetPeers().List() { + peer.Start() + m.peers.AddPeer(peer) + } + log.WithFields(log.Fields{"num": len(m.sw.GetPeers().List()), "peers": m.sw.GetPeers().List()}).Info("connected peers") + + for _, peer := range m.sw.GetPeers().List() { + p := m.peers.GetPeer(peer.ID()) + if p == nil { + continue + } + + if err := p.SendStatus(m.chain.BestBlockHeader(), m.chain.LastIrreversibleHeader()); err != nil { + log.WithFields(log.Fields{"peer": p, "err": err}).Error("SendStatus") + m.peers.RemovePeer(p.ID()) + } + } + + for _, peerInfo := range m.peers.GetPeerInfos() { + if peerInfo.Height > m.bestHeightSeen { + m.bestHeightSeen = peerInfo.Height + } + } + log.WithFields(log.Fields{"bestHeight": m.bestHeightSeen}).Info("peersInfo") + m.processPeerInfos(m.peers.GetPeerInfos()) + + for _, peer := range m.sw.GetPeers().List() { + p := m.peers.GetPeer(peer.ID()) + if p == nil { + continue + } + + m.peers.RemovePeer(p.ID()) + } + log.Info("Disonnect all peers.") + + m.Unlock() +} diff --git a/toolbar/precog/monitor/monitor.go b/toolbar/precog/monitor/monitor.go index 13ade52b..ccc24c21 100644 --- a/toolbar/precog/monitor/monitor.go +++ b/toolbar/precog/monitor/monitor.go @@ -37,8 +37,6 @@ type monitor struct { txPool *mock.Mempool // discvMap maps a node's public key to the node itself discvMap map[string]*dht.Node - dialCh chan struct{} - checkStatusCh chan struct{} bestHeightSeen uint64 peers *peers.PeerSet } @@ -75,8 +73,6 @@ func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor { chain: chain, txPool: txPool, discvMap: make(map[string]*dht.Node), - dialCh: make(chan struct{}, 1), - checkStatusCh: make(chan struct{}, 1), bestHeightSeen: uint64(0), } } @@ -108,10 +104,8 @@ func (m *monitor) Run() { log.WithFields(log.Fields{"err": err}).Fatal("makeSwitch") } - m.dialCh <- struct{}{} go m.discoveryRoutine() - go m.connectNodesRoutine() - go m.checkStatusRoutine() + go m.connectionRoutine() } func (m *monitor) makeSwitch() error { @@ -157,46 +151,3 @@ func (m *monitor) prepareReactors(peers *peers.PeerSet) error { m.sw.GetSecurity().RegisterFilter(m.sw.GetPeers()) return m.sw.GetSecurity().Start() } - -func (m *monitor) checkStatusRoutine() { - for range m.checkStatusCh { - for _, peer := range m.sw.GetPeers().List() { - peer.Start() - m.peers.AddPeer(peer) - } - log.WithFields(log.Fields{"num": len(m.sw.GetPeers().List()), "peers": m.sw.GetPeers().List()}).Info("connected peers") - - for _, peer := range m.sw.GetPeers().List() { - p := m.peers.GetPeer(peer.ID()) - if p == nil { - continue - } - - if err := p.SendStatus(m.chain.BestBlockHeader(), m.chain.LastIrreversibleHeader()); err != nil { - log.WithFields(log.Fields{"peer": p, "err": err}).Error("SendStatus") - m.peers.RemovePeer(p.ID()) - } - } - - for _, peerInfo := range m.peers.GetPeerInfos() { - if peerInfo.Height > m.bestHeightSeen { - m.bestHeightSeen = peerInfo.Height - } - } - log.WithFields(log.Fields{"bestHeight": m.bestHeightSeen}).Info("peersInfo") - m.processPeerInfos(m.peers.GetPeerInfos()) - - for _, peer := range m.sw.GetPeers().List() { - p := m.peers.GetPeer(peer.ID()) - if p == nil { - continue - } - - m.peers.RemovePeer(p.ID()) - } - log.Info("Disonnect all peers.") - - m.Unlock() - m.dialCh <- struct{}{} - } -} -- 2.11.0