|
@@ -5,6 +5,7 @@ import (
|
|
"fmt"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http"
|
|
"strings"
|
|
"strings"
|
|
|
|
+ "sync"
|
|
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/gorilla/mux"
|
|
"github.com/gravitl/netmaker/database"
|
|
"github.com/gravitl/netmaker/database"
|
|
@@ -434,7 +435,7 @@ func uncordonNode(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
w.WriteHeader(http.StatusOK)
|
|
json.NewEncoder(w).Encode("SUCCESS")
|
|
json.NewEncoder(w).Encode("SUCCESS")
|
|
|
|
|
|
- mq.NodeUpdate(&node)
|
|
|
|
|
|
+ runUpdates(&node, false)
|
|
}
|
|
}
|
|
|
|
|
|
// == EGRESS ==
|
|
// == EGRESS ==
|
|
@@ -624,42 +625,45 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
func runUpdates(node *models.Node, ifaceDelta bool) {
|
|
func runUpdates(node *models.Node, ifaceDelta bool) {
|
|
go func() { // don't block http response
|
|
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
|
|
// 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" {
|
|
if servercfg.IsClientMode() != "on" {
|
|
return nil
|
|
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 {
|
|
if err != nil {
|
|
- return getErr
|
|
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ifaceDelta && logic.IsLeader(¤tServerNode) {
|
|
|
|
+ if err := mq.PublishPeerUpdate(¤tServerNode); err != nil {
|
|
|
|
+ logger.Log(1, "failed to publish peer update "+err.Error())
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- if err = logic.ServerUpdate(¤tServerNode, ifaceDelta); err != nil {
|
|
|
|
|
|
+ if err := logic.ServerUpdate(¤tServerNode, ifaceDelta); err != nil {
|
|
logger.Log(1, "server node:", currentServerNode.ID, "failed update")
|
|
logger.Log(1, "server node:", currentServerNode.ID, "failed update")
|
|
return err
|
|
return err
|
|
}
|
|
}
|