}
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
// connected peers will be skipped in switch.DialPeers()
m.sw.DialPeers(addresses)
- m.setConnected()
log.Info("DialPeers done.")
+ // m.Unlock()
return nil
}
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(),
}
nodeMap[node.ID.String()] = node
+ // m.Unlock()
}
}
"os"
"os/user"
"strings"
- "sync/atomic"
+ // "sync"
"time"
"github.com/jinzhu/gorm"
)
type monitor struct {
+ // *sync.RWMutex
cfg *config.Config
db *gorm.DB
nodeCfg *vaporCfg.Config
}
return &monitor{
+ // RWMutex: &sync.RWMutex{},
cfg: cfg,
db: db,
nodeCfg: nodeCfg,
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 {
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() {
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)
-}