diff --git a/controllers/dns.go b/controllers/dns.go index dfa9f67b..0f5f1f7c 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -127,7 +127,7 @@ func createDNS(w http.ResponseWriter, r *http.Request) { if err = logic.ServerUpdate(&serverNode, false); err != nil { logger.Log(1, "failed to update server node after DNS update on", entry.Network) } - if err = mq.PublishPeerUpdate(&serverNode); err != nil { + if err = mq.PublishPeerUpdate(&serverNode, false); err != nil { logger.Log(0, "failed to publish peer update after ACL update on", entry.Network) } } diff --git a/controllers/network.go b/controllers/network.go index 855d206a..a2e92f04 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -255,7 +255,7 @@ func updateNetworkACL(w http.ResponseWriter, r *http.Request) { if err = logic.ServerUpdate(&serverNode, false); err != nil { logger.Log(1, "failed to update server node after ACL update on", netname) } - if err = mq.PublishPeerUpdate(&serverNode); err != nil { + if err = mq.PublishPeerUpdate(&serverNode, false); err != nil { logger.Log(0, "failed to publish peer update after ACL update on", netname) } } diff --git a/controllers/node.go b/controllers/node.go index 9a7f0029..d591c9a3 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -501,7 +501,7 @@ func createNode(w http.ResponseWriter, r *http.Request) { logger.Log(1, r.Header.Get("user"), "created new node", node.Name, "on network", node.Network) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(response) - runForceServerUpdate(&node) + runForceServerUpdate(&node, true) } // Takes node out of pending state @@ -722,7 +722,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"]) runUpdates(&node, false) - runForceServerUpdate(&node) + runForceServerUpdate(&node, false) } func runUpdates(node *models.Node, ifaceDelta bool) { @@ -751,7 +751,7 @@ func runServerUpdate(node *models.Node, ifaceDelta bool) error { } if ifaceDelta && logic.IsLeader(¤tServerNode) { - if err := mq.PublishPeerUpdate(¤tServerNode); err != nil { + if err := mq.PublishPeerUpdate(¤tServerNode, false); err != nil { logger.Log(1, "failed to publish peer update "+err.Error()) } } @@ -763,9 +763,9 @@ func runServerUpdate(node *models.Node, ifaceDelta bool) error { return nil } -func runForceServerUpdate(node *models.Node) { +func runForceServerUpdate(node *models.Node, publishPeerUpdateToNode bool) { go func() { - if err := mq.PublishPeerUpdate(node); err != nil { + if err := mq.PublishPeerUpdate(node, publishPeerUpdateToNode); err != nil { logger.Log(1, "failed a peer update after creation of node", node.Name) } diff --git a/mq/handlers.go b/mq/handlers.go index 5c4f8011..d4022d97 100644 --- a/mq/handlers.go +++ b/mq/handlers.go @@ -133,7 +133,7 @@ func updateNodePeers(currentNode *models.Node) { return } if logic.IsLeader(¤tServerNode) { - if err := PublishPeerUpdate(currentNode); err != nil { + if err := PublishPeerUpdate(currentNode, false); err != nil { logger.Log(1, "error publishing peer update ", err.Error()) return } diff --git a/mq/publishers.go b/mq/publishers.go index 89d561a0..73aa8626 100644 --- a/mq/publishers.go +++ b/mq/publishers.go @@ -12,7 +12,7 @@ import ( ) // PublishPeerUpdate --- deterines and publishes a peer update to all the peers of a node -func PublishPeerUpdate(newNode *models.Node) error { +func PublishPeerUpdate(newNode *models.Node, publishToSelf bool) error { if !servercfg.IsMessageQueueBackend() { return nil } @@ -23,7 +23,11 @@ func PublishPeerUpdate(newNode *models.Node) error { } for _, node := range networkNodes { - if node.IsServer == "yes" || newNode.ID == node.ID { // skip servers and self + if node.IsServer == "yes" { + continue + } + if !publishToSelf && newNode.ID == node.ID { + //skip self continue } peerUpdate, err := logic.GetPeerUpdate(&node) @@ -70,7 +74,7 @@ func PublishExtPeerUpdate(node *models.Node) error { if err = publish(node, fmt.Sprintf("peers/%s/%s", node.Network, node.ID), data); err != nil { return err } - go PublishPeerUpdate(node) + go PublishPeerUpdate(node, false) return nil } @@ -132,7 +136,7 @@ func sendPeers() { if force { logger.Log(2, "sending scheduled peer update (5 min)") } - err = PublishPeerUpdate(&serverNode) + err = PublishPeerUpdate(&serverNode, false) if err != nil { logger.Log(1, "error publishing udp port updates for network", network.NetID) logger.Log(1, errN.Error())