publish node update on ifcace change (#2600)

This commit is contained in:
Matthew R Kasun 2023-09-28 06:28:19 -04:00 committed by GitHub
parent cd80c03fa2
commit 83f2f2ef28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 36 deletions

View file

@ -343,9 +343,12 @@ func deleteHostFromNetwork(w http.ResponseWriter, r *http.Request) {
}
node.Action = models.NODE_DELETE
node.PendingDelete = true
// notify node change
mq.RunUpdates(node, false)
go func() { // notify of peer change
go func() {
// notify node change
if err := mq.NodeUpdate(node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
// notify of peer change
err = mq.PublishDeletedNodePeerUpdate(node)
if err != nil {
logger.Log(1, "error publishing peer update ", err.Error())

View file

@ -123,7 +123,11 @@ func migrate(w http.ResponseWriter, r *http.Request) {
if err != nil {
logger.Log(0, "error creating ingress gateway for node", node.ID, err.Error())
}
mq.RunUpdates(&ingressNode, true)
go func() {
if err := mq.NodeUpdate(&ingressNode); err != nil {
slog.Error("error publishing node update to node", "node", ingressNode.ID, "error", err)
}
}()
}
}
}

View file

@ -440,9 +440,11 @@ func createEgressGateway(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
go func() {
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
mq.PublishPeerUpdate()
}()
mq.RunUpdates(&node, true)
}
// swagger:route DELETE /api/nodes/{network}/{nodeid}/deletegateway nodes deleteEgressGateway
@ -481,9 +483,11 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
go func() {
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
mq.PublishPeerUpdate()
}()
mq.RunUpdates(&node, true)
}
// == INGRESS ==
@ -530,8 +534,11 @@ func createIngressGateway(w http.ResponseWriter, r *http.Request) {
logger.Log(1, r.Header.Get("user"), "created ingress gateway on node", nodeid, "on network", netid)
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
mq.RunUpdates(&node, true)
go func() {
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
}()
}
// swagger:route DELETE /api/nodes/{network}/{nodeid}/deleteingress nodes deleteIngressGateway
@ -582,16 +589,16 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) {
if err != nil {
return
}
go mq.PublishSingleHostPeerUpdate(
host,
allNodes,
nil,
removedClients[:],
)
go func() {
if err := mq.PublishSingleHostPeerUpdate(host, allNodes, nil, removedClients[:]); err != nil {
slog.Error("publishSingleHostUpdate", "host", host.Name, "error", err)
}
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
}()
}
}
mq.RunUpdates(&node, true)
}
// swagger:route PUT /api/nodes/{network}/{nodeid} nodes updateNode
@ -660,9 +667,11 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
logger.Log(1, r.Header.Get("user"), "updated node", currentNode.ID.String(), "on network", currentNode.Network)
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
mq.RunUpdates(newNode, ifaceDelta)
go func(aclUpdate, relayupdate bool, newNode *models.Node) {
if aclUpdate || relayupdate {
if err := mq.NodeUpdate(newNode); err != nil {
slog.Error("error publishing node update to node", "node", newNode.ID, "error", err)
}
if aclUpdate || relayupdate || ifaceDelta {
if err := mq.PublishPeerUpdate(); err != nil {
logger.Log(0, "error during node ACL update for node", newNode.ID.String())
}
@ -735,13 +744,13 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
logic.ReturnSuccessResponse(w, r, nodeid+" deleted.")
logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
if !fromNode { // notify node change
mq.RunUpdates(&node, false)
}
go func() { // notify of peer change
var err error
err = mq.PublishDeletedNodePeerUpdate(&node)
if err != nil {
if !fromNode {
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
}
if err := mq.PublishDeletedNodePeerUpdate(&node); err != nil {
logger.Log(1, "error publishing peer update ", err.Error())
}
host, err := logic.GetHost(node.HostID.String())

View file

@ -3,10 +3,10 @@ package mq
import (
"encoding/json"
"fmt"
mqtt "github.com/eclipse/paho.mqtt.golang"
"github.com/google/uuid"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/logic/hostactions"
"github.com/gravitl/netmaker/models"
@ -20,15 +20,6 @@ import (
var UpdateMetrics = func(client mqtt.Client, msg mqtt.Message) {
}
func RunUpdates(node *models.Node, ifaceDelta bool) {
go func() { // don't block http response
// publish node update if not server
if err := NodeUpdate(node); err != nil {
logger.Log(1, "error publishing node update to node", node.ID.String(), err.Error())
}
}()
}
// DefaultHandler default message queue handler -- NOT USED
func DefaultHandler(client mqtt.Client, msg mqtt.Message) {
slog.Info("mqtt default handler", "topic", msg.Topic(), "message", msg.Payload())

View file

@ -3,13 +3,15 @@ package logic
import (
"errors"
"fmt"
"net"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/logic/acls/nodeacls"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/mq"
"github.com/gravitl/netmaker/servercfg"
"net"
"golang.org/x/exp/slog"
)
// CreateRelay - creates a relay
@ -136,7 +138,13 @@ func UpdateRelayed(currentNode, newNode *models.Node) {
updatenodes := updateRelayNodes(currentNode.ID.String(), currentNode.RelayedNodes, newNode.RelayedNodes)
if len(updatenodes) > 0 {
for _, relayedNode := range updatenodes {
mq.RunUpdates(&relayedNode, false)
node := relayedNode
go func() {
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
}()
}
}
}