diff --git a/ee/logic/failover.go b/ee/logic/failover.go index de24d227..4928de50 100644 --- a/ee/logic/failover.go +++ b/ee/logic/failover.go @@ -80,11 +80,15 @@ func setFailoverNode(failoverNode, node *models.Node) error { return logic.UpdateNode(&nodeToUpdate, node) } +// WipeFailover - removes the failover peers of given node (ID) func WipeFailover(nodeid string) error { metrics, err := logic.GetMetrics(nodeid) if err != nil { return err } - metrics.FailoverPeers = make(map[string]string) - return logic.UpdateMetrics(nodeid, metrics) + if metrics != nil { + metrics.FailoverPeers = make(map[string]string) + return logic.UpdateMetrics(nodeid, metrics) + } + return nil } diff --git a/logic/nodes.go b/logic/nodes.go index 8bdcf042..0f0963c9 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -250,6 +250,20 @@ func ValidateNode(node *models.Node, isUpdate bool) error { return err } +// IsFailoverPresent - checks if a node is marked as a failover in given network +func IsFailoverPresent(network string) bool { + netNodes, err := GetNetworkNodes(network) + if err != nil { + return false + } + for i := range netNodes { + if netNodes[i].Failover == "yes" { + return true + } + } + return false +} + // CreateNode - creates a node in database func CreateNode(node *models.Node) error { diff --git a/logic/peers.go b/logic/peers.go index c746717d..edd5024b 100644 --- a/logic/peers.go +++ b/logic/peers.go @@ -95,7 +95,7 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) { if isP2S && peer.IsHub != "yes" { continue } - if len(metrics.FailoverPeers[peer.ID]) > 0 { + if len(metrics.FailoverPeers[peer.ID]) > 0 && IsFailoverPresent(node.Network) { logger.Log(2, "peer", peer.Name, peer.PrimaryAddress(), "was found to be in failover peers list for node", node.Name, node.PrimaryAddress()) continue }