OSDN Git Service

ix
[bytom/vapor.git] / toolbar / precog / monitor / discover.go
index 88d601b..4209ce6 100644 (file)
@@ -14,30 +14,31 @@ 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)
-               n := m.sw.GetDiscv().ReadRandomNodes(nodes)
-               m.collectDiscoveredNodes(nodes[:n])
-       }
-}
+               num := m.sw.GetDiscv().ReadRandomNodes(nodes)
+               for _, node := range nodes[:num] {
+                       if n, ok := m.discvMap[node.ID.String()]; ok && n.String() == node.String() {
+                               continue
+                       }
 
-func (m *monitor) collectDiscoveredNodes(nodes []*dht.Node) {
-       for _, node := range nodes {
-               if n, ok := m.nodeMap[node.ID.String()]; ok && n.String() == node.String() {
-                       continue
-               }
-               log.Infof("discover new node: %v", node)
-
-               if err := m.upSertNode(&config.Node{
-                       PublicKey: node.ID.String(),
-                       Host:      node.IP.String(),
-                       Port:      node.TCP,
-               }); err == nil {
-                       m.nodeMap[node.ID.String()] = node
-               } else {
-                       log.Error(err)
+                       log.WithFields(log.Fields{"new node": node}).Info("discover")
+
+                       if err := m.upsertNode(&config.Node{
+                               PublicKey: node.ID.String(),
+                               IP:        node.IP.String(),
+                               Port:      node.TCP,
+                       }); err != nil {
+                               log.WithFields(log.Fields{"node": node, "err": err}).Error("upsertNode")
+                       } else {
+                               m.discvMap[node.ID.String()] = node
+                       }
                }
+
+               m.Unlock()
        }
 }