OSDN Git Service

remove locks
authorHAOYUatHZ <haoyu@protonmail.com>
Mon, 19 Aug 2019 07:07:25 +0000 (15:07 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Mon, 19 Aug 2019 07:07:25 +0000 (15:07 +0800)
toolbar/precog/monitor/connection.go
toolbar/precog/monitor/discover.go
toolbar/precog/monitor/monitor.go

index 231f64d..ec78dc4 100644 (file)
@@ -20,10 +20,8 @@ func (m *monitor) connectNodesRoutine() {
 }
 
 func (m *monitor) dialNodes() error {
-       for m.isConnected() {
-               time.Sleep(5 * time.Second)
-       }
-       log.Info("Start to reconnect to peers...")
+       // m.Lock()
+       log.Info("Start to reconnect to nodes...")
        var nodes []*orm.Node
        if err := m.db.Model(&orm.Node{}).Find(&nodes).Error; err != nil {
                return err
@@ -47,7 +45,7 @@ func (m *monitor) dialNodes() error {
 
        // connected peers will be skipped in switch.DialPeers()
        m.sw.DialPeers(addresses)
-       m.setConnected()
        log.Info("DialPeers done.")
+       // m.Unlock()
        return nil
 }
index 9a1560c..0e9ef47 100644 (file)
@@ -33,10 +33,7 @@ func (m *monitor) collectDiscoveredNodes() {
                        continue
                }
                log.Info("discover new node: ", node)
-
-               for m.isConnected() {
-                       time.Sleep(1 * time.Second)
-               }
+               // m.Lock()
                if err := m.upSertNode(&config.Node{
                        PublicKey: node.ID.String(),
                        Host:      node.IP.String(),
@@ -46,5 +43,6 @@ func (m *monitor) collectDiscoveredNodes() {
                }
 
                nodeMap[node.ID.String()] = node
+               // m.Unlock()
        }
 }
index 334ddd7..4a302f7 100644 (file)
@@ -6,7 +6,7 @@ import (
        "os"
        "os/user"
        "strings"
-       "sync/atomic"
+       // "sync"
        "time"
 
        "github.com/jinzhu/gorm"
@@ -29,6 +29,7 @@ import (
 )
 
 type monitor struct {
+       // *sync.RWMutex
        cfg       *config.Config
        db        *gorm.DB
        nodeCfg   *vaporCfg.Config
@@ -69,6 +70,7 @@ func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor {
        }
 
        return &monitor{
+               // RWMutex: &sync.RWMutex{},
                cfg:     cfg,
                db:      db,
                nodeCfg: nodeCfg,
@@ -161,10 +163,6 @@ func (m *monitor) prepareReactors(peers *peers.PeerSet) error {
        return m.sw.GetSecurity().Start()
 }
 
-// TODO:
-// 现象是,时间区间过小时,  会一直有 dial ,但是不能 send业务层 msg
-// 还不确定是不是死锁,时间调大一点比如15s 就可以正确运行
-// 想法,自己再另外加锁,或者找到锁住的真正原因
 func (m *monitor) checkStatusRoutine() {
        peers := peers.NewPeerSet(m.sw)
        if err := m.prepareReactors(peers); err != nil {
@@ -179,9 +177,7 @@ func (m *monitor) checkStatusRoutine() {
        bestHeight := uint64(0)
        ticker := time.NewTicker(time.Duration(m.cfg.CheckFreqSeconds) * time.Second)
        for range ticker.C {
-               for !m.isConnected() {
-                       time.Sleep(1 * time.Second)
-               }
+               // m.Lock()
                log.Info("connected peers: ", m.sw.GetPeers().List())
 
                for _, peer := range m.sw.GetPeers().List() {
@@ -223,21 +219,7 @@ func (m *monitor) checkStatusRoutine() {
 
                        peers.RemovePeer(p.ID())
                }
-
-               m.setDisonnected()
                log.Info("Disonnect all peers.")
+               // m.Unlock()
        }
 }
-
-func (m *monitor) isConnected() bool {
-       atomic.LoadUint32(&m.connected)
-       return m.connected == uint32(1)
-}
-
-func (m *monitor) setConnected() {
-       atomic.StoreUint32(&m.connected, 1)
-}
-
-func (m *monitor) setDisonnected() {
-       atomic.StoreUint32(&m.connected, 0)
-}