Browse Source

adding force peer push every 5 min

afeiszli 3 years ago
parent
commit
d4b15f0a2d
2 changed files with 43 additions and 22 deletions
  1. 39 21
      mq/mq.go
  2. 4 1
      netclient/functions/daemon.go

+ 39 - 21
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
 		}
 	}
 }

+ 4 - 1
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")
 	})