Browse Source

fix peer sync

afeiszli 3 years ago
parent
commit
c6252764e8
2 changed files with 20 additions and 2 deletions
  1. 11 0
      logic/util.go
  2. 9 2
      mq/mq.go

+ 11 - 0
logic/util.go

@@ -371,3 +371,14 @@ func setNetworkServerPeers(serverNode *models.Node) {
 		logger.Log(1, "could not set peers on network", serverNode.Network, ":", err.Error())
 	}
 }
+
+// ShouldPublishPeerPorts - Gets ports from iface, sets, and returns true if they are different
+func ShouldPublishPeerPorts(serverNode *models.Node) bool {
+	if currentPeersList, err := getSystemPeers(serverNode); err == nil {
+		if database.SetPeers(currentPeersList, serverNode.Network) {
+			logger.Log(1, "set new peers on network", serverNode.Network)
+			return true
+		}
+	}
+	return false
+}

+ 9 - 2
mq/mq.go

@@ -17,7 +17,7 @@ import (
 	"github.com/gravitl/netmaker/servercfg"
 )
 
-const KEEPALIVE_TIMEOUT = 60 //timeout in seconds
+const KEEPALIVE_TIMEOUT = 10 //timeout in seconds
 const MQ_DISCONNECT = 250
 
 // DefaultHandler default message queue handler - only called when GetDebug == true
@@ -198,6 +198,13 @@ func Keepalive(ctx context.Context) {
 						id = servAddr.ID
 					}
 				}
+				serverNode, errN := logic.GetNodeByID(id)
+				if errN == nil && network.DefaultUDPHolePunch == "yes" && logic.ShouldPublishPeerPorts(&serverNode) {
+					err = PublishPeerUpdate(&serverNode)
+					if err != nil {
+						logger.Log(1, "error publishing udp port updates", err.Error())
+					}
+				}
 				if id == "" {
 					logger.Log(0, "leader not defined for network", network.NetID)
 					continue
@@ -207,8 +214,8 @@ func Keepalive(ctx context.Context) {
 				} else {
 					logger.Log(2, "keepalive sent for network", network.NetID)
 				}
-				client.Disconnect(MQ_DISCONNECT)
 			}
+			client.Disconnect(MQ_DISCONNECT)
 		}
 	}
 }