OSDN Git Service

clean
authorHAOYUatHZ <haoyu@protonmail.com>
Wed, 28 Aug 2019 02:25:41 +0000 (10:25 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Wed, 28 Aug 2019 02:25:41 +0000 (10:25 +0800)
toolbar/precog/monitor/discover.go
toolbar/precog/monitor/monitor.go

index 6f413ff..c65dcb1 100644 (file)
@@ -1,7 +1,6 @@
 package monitor
 
 import (
-       "sync"
        "time"
 
        log "github.com/sirupsen/logrus"
@@ -15,38 +14,34 @@ var (
        discvFreqSec = 60
 )
 
-func (m *monitor) discoveryRoutine(discvWg *sync.WaitGroup) {
+func (m *monitor) discoveryRoutine() {
        ticker := time.NewTicker(time.Duration(discvFreqSec) * time.Second)
        for range ticker.C {
                m.Lock()
+
                nodes := make([]*dht.Node, nodesToDiscv)
                num := m.sw.GetDiscv().ReadRandomNodes(nodes)
-               for i := 0; i < num; i++ {
-                       node := nodes[i]
+               for _, node := range nodes[:num] {
                        if n, ok := m.discvMap[node.ID.String()]; ok && n.String() == node.String() {
                                continue
                        }
 
                        log.Infof("discover new node: %v", node)
-                       discvWg.Add(1)
-                       m.discvCh <- node
+                       m.saveDiscoveredNode(node)
                }
-               discvWg.Wait()
+
                m.Unlock()
        }
 }
 
-func (m *monitor) collectDiscoveredNodes(discvWg *sync.WaitGroup) {
-       for node := range m.discvCh {
-               if err := m.upSertNode(&config.Node{
-                       PublicKey: node.ID.String(),
-                       Host:      node.IP.String(),
-                       Port:      node.TCP,
-               }); err == nil {
-                       m.discvMap[node.ID.String()] = node
-               } else {
-                       log.Error(err)
-               }
-               discvWg.Done()
+func (m *monitor) saveDiscoveredNode(node *dht.Node) {
+       if err := m.upSertNode(&config.Node{
+               PublicKey: node.ID.String(),
+               Host:      node.IP.String(),
+               Port:      node.TCP,
+       }); err == nil {
+               m.discvMap[node.ID.String()] = node
+       } else {
+               log.Error(err)
        }
 }
index 28c52c7..12c937a 100644 (file)
@@ -36,7 +36,6 @@ type monitor struct {
        txPool  *mock.Mempool
        // discvMap maps a node's public key to the node itself
        discvMap map[string]*dht.Node
-       discvCh  chan *dht.Node
        dialCh   chan struct{}
        // TODO: maybe remove?
        checkStatusCh chan struct{}
@@ -78,7 +77,6 @@ func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor {
                chain:         chain,
                txPool:        txPool,
                discvMap:      make(map[string]*dht.Node),
-               discvCh:       make(chan *dht.Node),
                dialCh:        make(chan struct{}, 1),
                checkStatusCh: make(chan struct{}, 1),
        }
@@ -112,9 +110,7 @@ func (m *monitor) Run() {
        }
 
        m.dialCh <- struct{}{}
-       var discvWg sync.WaitGroup
-       go m.discoveryRoutine(&discvWg)
-       go m.collectDiscoveredNodes(&discvWg)
+       go m.discoveryRoutine()
        go m.connectNodesRoutine()
        go m.checkStatusRoutine()
 }