Browse Source

updated serverUpdate check

0xdcarns 3 years ago
parent
commit
43b6b8c6cb
1 changed files with 27 additions and 23 deletions
  1. 27 23
      controllers/node.go

+ 27 - 23
controllers/node.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"net/http"
 	"strings"
+	"sync"
 
 	"github.com/gorilla/mux"
 	"github.com/gravitl/netmaker/database"
@@ -434,7 +435,7 @@ func uncordonNode(w http.ResponseWriter, r *http.Request) {
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode("SUCCESS")
 
-	mq.NodeUpdate(&node)
+	runUpdates(&node, false)
 }
 
 // == EGRESS ==
@@ -624,42 +625,45 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 
 func runUpdates(node *models.Node, ifaceDelta bool) {
 	go func() { // don't block http response
-		if isServer(node) { // don't publish to server node
-			if err := runServerUpdate(node, ifaceDelta); err != nil {
-				logger.Log(1, "error running server update", err.Error())
-			}
-		} else { // publish node update if not server
-			if err := mq.NodeUpdate(node); err != nil {
-				logger.Log(1, "error publishing node update to node", node.Name, node.ID, err.Error())
-			}
+		err := logic.TimerCheckpoint()
+		if err != nil {
+			logger.Log(3, "error occurred on timer,", err.Error())
+		}
+		if err := runServerUpdate(node, ifaceDelta); err != nil {
+			logger.Log(1, "error running server update", err.Error())
+		}
+		// publish node update if not server
+		if err := mq.NodeUpdate(node); err != nil {
+			logger.Log(1, "error publishing node update to node", node.Name, node.ID, err.Error())
 		}
 	}()
 }
 
 // updates local peers for a server on a given node's network
-func runServerUpdate(serverNode *models.Node, ifaceDelta bool) error {
-
-	err := logic.TimerCheckpoint()
-	if err != nil {
-		logger.Log(3, "error occurred on timer,", err.Error())
-	}
-
+func runServerUpdate(node *models.Node, ifaceDelta bool) error {
+	var mutex sync.Mutex
+	mutex.Lock()
+	defer mutex.Unlock()
 	if servercfg.IsClientMode() != "on" {
 		return nil
 	}
 
-	if ifaceDelta {
-		if err := mq.PublishPeerUpdate(serverNode); err != nil {
-			logger.Log(1, "failed to publish peer update "+err.Error())
-		}
+	if !isServer(node) && ifaceDelta {
+		ifaceDelta = false
 	}
 
-	var currentServerNode, getErr = logic.GetNetworkServerLeader(serverNode.Network)
+	currentServerNode, err := logic.GetNetworkServerLocal(node.Network)
 	if err != nil {
-		return getErr
+		return err
+	}
+
+	if ifaceDelta && logic.IsLeader(&currentServerNode) {
+		if err := mq.PublishPeerUpdate(&currentServerNode); err != nil {
+			logger.Log(1, "failed to publish peer update "+err.Error())
+		}
 	}
 
-	if err = logic.ServerUpdate(&currentServerNode, ifaceDelta); err != nil {
+	if err := logic.ServerUpdate(&currentServerNode, ifaceDelta); err != nil {
 		logger.Log(1, "server node:", currentServerNode.ID, "failed update")
 		return err
 	}