From a12785aa60425e214722bba83cf40691f28162e3 Mon Sep 17 00:00:00 2001 From: rao yunkun Date: Wed, 6 Jun 2018 21:00:59 +0800 Subject: [PATCH] [tm-monitor] fixed online status not changing issue. (#99) * [tm-monitor] fixed online status not changing issue. * Refactor UpdateNodeStatus. --- tm-monitor/monitor/monitor.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tm-monitor/monitor/monitor.go b/tm-monitor/monitor/monitor.go index 022e1db7c..e53b33254 100644 --- a/tm-monitor/monitor/monitor.go +++ b/tm-monitor/monitor/monitor.go @@ -131,6 +131,21 @@ func (m *Monitor) NodeByName(name string) (index int, node *Node) { return -1, nil } +// NodeIsOnline is called when connection to the node is restored. +// Must be safe to call multiple times. +func (m *Monitor) NodeIsOnline(name string) { + + _, node := m.NodeByName(name) + if nil != node { + if online, ok := m.Network.nodeStatusMap[name]; ok && online { + m.mtx.Lock() + node.Online = online + m.mtx.Unlock() + } + } + +} + // Start starts the monitor's routines: recalculating network uptime and // updating number of validators. func (m *Monitor) Start() error { @@ -160,14 +175,17 @@ func (m *Monitor) listen(nodeName string, blockCh <-chan tmtypes.Header, blockLa case b := <-blockCh: m.Network.NewBlock(b) m.Network.NodeIsOnline(nodeName) + m.NodeIsOnline(nodeName) case l := <-blockLatencyCh: m.Network.NewBlockLatency(l) m.Network.NodeIsOnline(nodeName) + m.NodeIsOnline(nodeName) case disconnected := <-disconnectCh: if disconnected { m.Network.NodeIsDown(nodeName) } else { m.Network.NodeIsOnline(nodeName) + m.NodeIsOnline(nodeName) } case <-time.After(nodeLivenessTimeout): logger.Info("event", fmt.Sprintf("node was not responding for %v", nodeLivenessTimeout))