diff --git a/mq/mq.go b/mq/mq.go index ce7ceec4..3568f70d 100644 --- a/mq/mq.go +++ b/mq/mq.go @@ -242,30 +242,48 @@ func Keepalive(ctx context.Context) { case <-ctx.Done(): return case <-time.After(time.Second * KEEPALIVE_TIMEOUT): - networks, err := logic.GetNetworks() - if err != nil { - logger.Log(1, "error retrieving networks for keepalive", err.Error()) - } - for _, network := range networks { - serverNode, errN := logic.GetNetworkServerLeader(network.NetID) - if errN == nil { - serverNode.SetLastCheckIn() - logic.UpdateNode(&serverNode, &serverNode) - if network.DefaultUDPHolePunch == "yes" { - if logic.ShouldPublishPeerPorts(&serverNode) { - err = PublishPeerUpdate(&serverNode) - if err != nil { - logger.Log(1, "error publishing udp port updates for network", network.NetID) - logger.Log(1, errN.Error()) - } - } + sendPeers() + return + } + } +} + +var counter = make(chan int, 0) + +// sendPeers - retrieve networks, send peer ports to all peers +func sendPeers() { + var force bool + var tmpcount = <-counter + 1 + counter <- tmpcount + if tmpcount == 5 { + force = true + counter <- 0 + } + networks, err := logic.GetNetworks() + if err != nil { + logger.Log(1, "error retrieving networks for keepalive", err.Error()) + } + for _, network := range networks { + serverNode, errN := logic.GetNetworkServerLeader(network.NetID) + if errN == nil { + serverNode.SetLastCheckIn() + logic.UpdateNode(&serverNode, &serverNode) + if network.DefaultUDPHolePunch == "yes" { + if logic.ShouldPublishPeerPorts(&serverNode) || force { + if force { + logger.Log(2, "sending scheduled peer update (5 min)") + } + err = PublishPeerUpdate(&serverNode) + if err != nil { + logger.Log(1, "error publishing udp port updates for network", network.NetID) + logger.Log(1, errN.Error()) } - } else { - logger.Log(1, "unable to retrieve leader for network ", network.NetID) - logger.Log(1, errN.Error()) - continue } } + } else { + logger.Log(1, "unable to retrieve leader for network ", network.NetID) + logger.Log(1, errN.Error()) + continue } } } diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 8b1acc76..ad3184ff 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -132,7 +132,10 @@ func SetupMQTT(cfg *config.ClientConfig, publish bool) mqtt.Client { ncutils.Log("detected broker connection lost, running pull for " + cfg.Node.Network) _, err := Pull(cfg.Node.Network, true) if err != nil { - ncutils.Log("could not run pull, please restart daemon or examine network connectivity --- " + err.Error()) + ncutils.Log("could not run pull, server unreachable, restarting daemon in 5 minutes..." + err.Error()) + time.Sleep(time.Minute * 5) + ncutils.Log("restarting netclient") + daemon.Restart() } ncutils.Log("connection re-established with mqtt server") })